解法一:置换
class Solution {
public:
int missingNumber(vector<int>& nums)
{
//每次交换,位置 i 和 位置nums[i]的值,直到i的值是nums[i],这样时间可能不是线性了,主要是存在>=len;
int len=nums.size();
int i=0;
while(i<len)
{
if(nums[i]>=len)
{
++i;
continue;
}
if(i!=nums[i])
{
swap( nums[i], nums[ nums[i] ] );
}
else
{
++i;
}
}
for(int i=0;i<len;i++)
{
if (nums[i]!=i)
return i;
}
return len;
}
};
解法二,巧妙
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int n=nums.size();
int sum=n*(1+n)/2;
for(int i=0;i<n;i++)
sum-=nums[i];
return sum;
}
};