2024年10月8日
参考github网站:代码随想录
1.二分查找
leetcode
视频
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size()-1;while(left<=right){int middle = (left+right)/2;if(nums[middle] > target){right = middle -1;}else if(nums[middle] < target){left = middle +1;}else return middle;}return -1;}
};
核心是边界处理。
以左右均为闭区间为例:
第一个点是while循环中left是可以等于right的,因为[1,1]仍然有意义,否则就是丢情况;
第二个点是在进行左右两个区间分割的时候,是将middle-1传递给right或middle+1传递给left,如果将middle传递,是因为区间是闭区间,middle是被包含的,但是middle一定不是target的目标值(nums[middle] > target)。相反在左闭右开区间,开区间的部分就是传递middle了。