一、最朴素的二分查找问题
点击链接
题目

代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1;
while (l <= r)
{
int mid = (l + r) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) l = mid + 1;
else r = mid - 1;
}
return -1;
}
};
二、找递增数组中x的左右索引值
点击链接
题目

代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
if (!nums.size())
{
res = {-1, -1};
return res;
}
int l = 0, r = nums.size() - 1;
while (l < r)
{
int mid = (l + r) / 2;
if (nums[mid] >= target) r = mid;
else l = mid + 1;
}
if (nums[l] != target) res = {-1, -1};
else
{
res.push_back(l);
int l = 0, r = nums.size() - 1;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (nums[mid] <= target) l = mid;
else r = mid - 1;
}
res.push_back(l);
}
return res;
}
};