Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
思路:类似索引排序,让每个数字回到它应该在的位置,最后某个位置x上的元素不是x+1,那么这个位置就出错了。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int len = nums.size();
if(len == 0)
return 1;
for(int i=0;i<len;i++)
{
while(nums[i]>0 && nums[i]<=len && nums[i]!=nums[nums[i]-1])
swap(nums[i],nums[nums[i]-1]);
}
for(int i=0;i<len;i++)
{
if(nums[i] != i+1)
return i+1;
}
return len+1;
}
};