int BinarySearch(vector<int> nums,int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target)return mid;
if (nums[mid] > target)right = mid - 1;
else left = mid + 1;
}
return -1;
}
第二类:查找第一个不小于目标值的数,可变形为查找最后一个小于目标值的数
int BinarySearch(vector<int> nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target)left = mid + 1;
else right = mid - 1;
}
return left;
}
第三类: 查找第一个大于目标值的数,可变形为查找最后一个不大于目标值的数
int BinarySearch(vector<int> nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] <= target)left = mid + 1;
else right = mid - 1;
}
return left;
}