解法一:置換
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;
}
};