二分查找
- 注意,跳出循环的判定条件left<=right一定要有等号,否则会丢失边界。
int findNums(vector<int>& nums, int k) {
int left = 0;
int right = nums.size() - 1;
int mid = (left + right) >> 1;
// 注意,此处一定要加上=号,不加就会忽略边界值
while (left <= right) {
mid = (left + right) >> 1;
if (nums[mid] == k) {
return mid;
}
else if (nums[mid] < k) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}