思路
定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。因为定义target在[left, right]区间,所以有如下两点:
- while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
- if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1。
代码
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right){
int mid=left+right>>1;
if(nums[mid]>target) right=mid-1;
else if (nums[mid]<target) left=mid+1;
else return mid;
}
return -1;
}
题目
- 二分查找:力扣题目链接