leetcode oj 1

Search Insert Position

http://blog.csdn.net/u012661091/article/details/47088989

这是leetcode 一道简单的OJ题,主要就是理解二分查找,这一题看起来很简单,但是不理解二分查找的话,做起来会有大大小小不少问题,

下面给出解析和答案

其实主要就是二分查找算法稍微变形一下,二分查找的过程是将有序数组一分为2,不停的循环,最终查找到目标所在的位置,如果目标不在数组当中,返回-1。本题则是如果数组中不存在该目标值,则返回该目标值插入的位置。

public int searchOrInsert(int[] sortedArray,int target){
        int left=0;
        int right=sortedArray.length-1;
        int mid = 0;
        while(left<=right){
            mid=(left+right)>>1;
            if(sortedArray[mid]==target)
                return mid;
            else if(sortedArray[mid]>target)
                right=mid-1;
            else 
                left=mid+1;
        }
        return sortedArray[mid]<target?mid+1:mid;
    }

该算法仅仅需要在最后一步返回目标值的正确位置。这个位置如何判断呢?
假设输入参数为数组:1,3,3,5 target为4,
我们逐步进入算法看看,首先left=0;right=3;mid=1
target在mid的右边,left=mid+1也就是2,mid=2;right=3;
target在mid右边,left=mid+1也就是3,right=3,mid=3,此时target在mid左边,right=mid-1也就是2,注意这时已经不满足循环条件了,退出循环,判断该target值在mid的左边,于是该target应该在mid的位置插入,return mid。
反之如果最终target在mid右边,则target的插入位置在mid+1处。

点赞