要求:长度为n,数范围0-n,有序,找缺那个
思路:明显二分,最后left和right相差1时,还剩两步,无论怎么走,他们最终都会交换位置
class Solution {
public:
int missingNumber(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<=right){
int mid=left+(right-left>>1);
if(nums[mid]==mid)left=mid+1;
else if(nums[mid]>mid)right=mid-1;
}
return right==-1?nums[left]-1:nums[right]+1;
}
};