problem:
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.
虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。
思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int i = 0;
int result = 0;
while(i < nums.size())
{
if(nums[i] != i+1 && nums[i] >= 1 && nums[i] <= nums.size() && nums[nums[i]-1] != nums[i])
{
swap(nums[i], nums[nums[i]-1]);
}
else
i++;
}
int j=0;
for(; j<nums.size(); j++)
{
if(nums[j] != j+1)
{
result = j+1;
return result;
}
}
result = nums.size()+1;
return result;
}
};