关于最后为什么return left,其实可以这么理解,没有找到时,l与r肯定反了,不够成区间,且相差不会超过1,跳出前的情况可以分为一下两种:
lr相等(l == r == mid)
lr差一(l=mid,r=l+1)
综上可以return left 或 right+1
这些其实原理是在:所有的lr反转前lr肯定是相遇了或差一的时候反的,然后另外一个核心是mid是向下取整重叠到l的,这才有上面的结果。
class Solution {
public:
int searchInsert(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 if(nums[mid]>target)
right = mid-1;
else
return mid;
}
return left;
}
};