二分查找需要注意的事情
- 二分查找的本质是不断对半缩小查找的范围,把所有数分为可能出现要查找数据的部分和不可能出现要查找数据的部分
- 根据mid的值以及一些简单的辅助条件,能够迅速的排除一半区域的做法。
leetcode 35
这道题我们可以转化为求第一个大于或等于target的元素的下标,所以我们查找的时候分为两部分,一个是不可能出现我们要求的下标的,一个是可能出现的
接着我们思考nums【mid】,target和我们要求的元素的值(<=target,可以视作取target或者target+1,薛定谔的值)的关系
我们要从nums【mid】和target的大小关系,推出要求的值,(也就是那个薛定谔的值)所在范围
那么nums【mid】假如小于target,left到mid的部分不可能出现我们要求的下标,所以代码如下
int searchInsert(int* nums, int numsSize, int target){
int left=0;
int right=numsSize-1;
int mid;
if(nums[numsSize-1]<target)
return numsSize;
//可以在0到numssize-1中去查找了
while(left<right)
{
mid=left+(right-left)/2;
if(nums[mid]<target)
left=mid+1;
else if(nums[mid]>target)
right=mid;
else return mid;
}
return left;
}