【力扣算法题】每天一道,健康生活
2024年10月8日
参考github网站:代码随想录
1.二分查找
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了。
原文地址:https://blog.csdn.net/qq_45306739/article/details/142770217
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!