做题思路:
1.要注意先确定二分的区间,这里是 [ left, right ] 两边闭合
2.因为left = right 在 [ left, right ] 中是有意义的,所以二分法的循环判断条件应当是 left <= right
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;//左右两个指针
while (left <= right) { //这里注意,left = right是有意义的!所以二分法的条件应当是 left <= right
int middle = left + ((right - left) / 2); //中间指针
if (nums[middle] > target) {
right = middle - 1; //这里不用取middle,直接取middle - 1,因为这个时候已经知道middle是不符合条件的了,所以直接往符合条件的区间靠就好
} else if (nums[middle] < target) {
left = middle + 1;
} else {
return middle;
}
}
return -1; //倘若上面的条件都没有让 num[middle] == target,则寄
}
};