// 二分模板一共有两个,分别适用于不同情况。
// 算法思路:假设目标值在闭区间[l, r]中,
// 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。
// 版本1. 当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,
// 其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。
int binary_search1(vector<int>& nums, int target) {
int left = 0, right = (int)nums.size()-1;
while (left <= right) {
int mid = left + ((right - left) >> 1); // 计算mid时不需要加1
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 版本2. 当我们将区间[l, r]划分成[l, mid-1]和[mid, r]时,
// 其更新操作是r = mid - 1或者l = mid;,计算mid时需要加1。
int binary_search2(vector<int>& nums, int target) {
int left = 0, right = (int)nums.size();
while (left < right) {
int mid = left + ((right - left) >> 1); // 计算mid时需要加1
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return -1;
}
二分模板整理
最新推荐文章于 2024-11-06 11:05:01 发布