Difficulty:medium
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
int i=0, j=nums.size()-1, mid;
if(nums[j]==j) return j+1;
else if(nums[0]>0) return 0;
while(i+1<j){
mid=(i+j)/2;
if(nums[mid]>mid) j=mid;
else i=mid;
}
return j;
}
};
首先对数组进行sort排序。再用二分法查找缺失的数,当 i+1==j 时得到结果j。
对首位及末位缺失的情况进行特殊判断。