【区间】:[left, right]
【终止条件】:left = right + 1
int binarySearch(vector<int>& nums, int target) {
// 区间[left, right]
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid - 1;
}
return -1;
}
【区间】:[left, right)
【终止条件】:left = right
/**寻找左侧边界的二分搜索**/
int leftBound(vector<int>& nums, int target) {
// 区间[left, right)
int left = 0, right = nums.size();
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target)
// 不返回,收缩右边界,找到左侧边界
right = mid;
else if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid;
}
if (left == nums.size()) return -1;
return nums[left] == target ? left : -1;
}
【区间】:[left, right)
【注意】:最后是mid = left - 1
【终止条件】:left = right
/**寻找右侧边界的二分搜索**/
int rightBound(vector<int>& nums, int target) {
// 区间[left, right)
int left = 0, right = nums.size();
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target)
// 不返回,收缩左边界,找到左右侧边界
left = mid + 1;
else if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid;
}
if (left == 0) return -1;
return nums[left - 1] == target ? left - 1 : -1;
}
感谢labudadong大佬的整理,以此学习
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有