难度:hard
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.
这道题要找到第一个遗失的正数
其实不难 主要是要考虑到所有的可能性 我们分下面几步来做:
1. 将数组排序
2. 将重复的数字删去
3. 将负数略去
4. 将元素与循环的i相比
所有的情况考虑清楚之后 很容易就写出来了
代码如下:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.size()==0)
return 1;
sort(nums.begin(),nums.end());
if(nums[nums.size()-1]<=0)
return 1;
for(int i=nums.size()-1;i>=1;i--)
{
if(nums[i-1]==nums[i])
{
vector<int>:: iterator it=nums.begin()+i;
nums.erase(it);
}
}
if(nums[0]>0)
{
for(int i=0;i<nums.size();i++)
{
if(nums[i]==i+1&&i==nums.size()-1)
return nums.size()+1;
if(nums[i]!=i+1)
return i+1;
}
}
int index=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]<=0)
index=i;
else
break;
}
for(int i=index+1,k=1;i<nums.size();k++,i++)
{
if(nums[i]!=k)
return k;
}
return nums[nums.size()-1]+1;
}
};