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.
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
swap_sort(nums);
for(int i=0;i<nums.size();i++){
if(nums[i]!=i+1){
return i+1;
}
}
return nums.size()+1;
}
private:
//将nums[i]交换至nums[nums[i]-1]处,使得下标为i-1的地方存储的是数i
void swap_sort(vector<int>& nums){
for(int i=0;i<nums.size();i++){
while(nums[i]!=nums[nums[i]-1]){
if(nums[i]<0 || nums[i]>nums.size() || nums[i]==nums[nums[i]-1])
break;
else swap(nums[i],nums[nums[i]-1]);
}
}
}
};