题目:First Missing Positive
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.
解析:利用一种很奇妙的解法,也是看了解答才明白,时间复杂度O(n),目的是把数组变成1,2,3...n的形式,第一个没在数组中出现的也即是n+1.
当前遍历的位置i是i+1时继续进行下一个循环,当位置i上的数不在1-n范围时,即认为这个数不合法,同时重复出现的数也不合法,把这个数剔除,n--
数组中把一个数剔除的方法就是把数组中的最后一个数代替当前的位置的数
代码:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
for (int i=0; i<n;)
{
if (nums[i]==(i+1))
{
i++;
}
else if (nums[i]<=0 || nums[i]>n ||nums[i]==nums[nums[i]-1])
{
nums[i]=nums[--n];
}
else
{
int temp=nums[i];
nums[i]=nums[nums[i]-1];
nums[temp-1]=temp;
}
}
return n+1;
}
};