704.二分查找
做题思路:
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,则寄 } };