给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
tips : 将大小在1~n之间的元素a,放置到nums[a]处。
再从头开始一次遍历,找出第一个nums[i]!=i+1的情况,返回i+1。
时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int temp;
if(nums.size()==0) {
return 1;
}
for (int i = 0; i < nums.size();)
{
if(nums[i]>0&&nums[i]<=nums.size()&&nums[i]!=i+1&&nums[nums[i]-1]!=nums[i]) {
temp = nums[i];
nums[i]=nums[temp-1];
nums[temp-1]=temp;
} else {
i++;
}
}
for (int i = 0; i < nums.size(); i++)
{
if(nums[i]!=i+1) {
return i+1;
}
}
return nums.size()+1;
}
};