Search Insert Position
这是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处。