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?
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
class Solution {
public:
int missingNumber(vector<int>& nums) {
int found = false;
int retValue;
for (int i=0; i<nums.size(); i++)
{
while (nums[i] != i)
{
int nextIdx = nums[i];
if (nextIdx < nums.size())
{
int tmp = nums[i];
nums[i] = nums[nextIdx];
nums[nextIdx] = tmp;
}
else
{
found = true;
retValue = i; //注意,这里返回的是i不是nums[i];
break;
}
}
}
if (!found)
return nums.size();
else
return retValue;
}
};