浅谈二分的边界问题
https://www.luogu.com.cn/blog/HOJQVFNA/qian-tan-er-fen-di-bian-jie-wen-ti
LeetCode 35. 搜索插入位置
2020
int searchInsert(vector<int>& nums, int target) {
int lb = 0,ub = nums.size()-1;
while (lb <= ub) {
int mid = (lb + ub)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] < target) {
lb = mid + 1;
} else{
ub = mid - 1;
}
}
return lb;
}
2022
int searchInsert(vector<int>& nums, int target) {
int left = 0, right = nums.size();
int mid;
while(left < right) {
mid = left + ((right - left) >> 1);
if(nums[mid] == target) return mid;
else if(nums[mid] < target) left = mid + 1;
else right = mid;
}
return left;
}
\[1 <= bad <= n <= 2^{31} - 1
\]
int firstBadVersion(int n) {
int left = 1, right = n;
while(left < right) {
int mid = left + ((right - left) >> 1);
if(isBadVersion(mid)) {
if(mid == 0 || (mid > 0 && !isBadVersion(mid - 1))) return mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size();
int mid;
while(left < right) {
mid = (left + right) >> 1;
if(nums[mid] == target) return mid;
else if(nums[mid] < target) left = mid + 1;
else right = mid;
}
if(nums[mid] != target) return -1;
return mid;
}
lower_bound & upper_bound
在从小到大的排序数组中,
lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
在从大到小的排序数组中
lower_bound( begin,end,num,greater
upper_bound( begin,end,num,greater
————————————————
版权声明:本文为CSDN博主「brandong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40160605/article/details/80150252
岂能尽如人意,但求无愧我心