一、问题描述
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.
二、思路
当前值如果正常或者当前值超过数组的范围,则退出本次循环,进入下一次循环;如果满足条件交换nums[i]和nums[cur - 1]的值。当nums[i]和nums[cur - 1]不等时,将i - 1
循环外当某一值和i+ 1不等时,返回丢失的数i + 1.
如果没有满足条件的元素值,则直接返回nums.size() +1。
三、代码
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
for(int i = 0; i < nums.size(); ++i){
int cur = nums[i];
if(cur == i + 1 || cur <= 0 || cur > nums.size()) continue;
swap(nums[i],nums[cur - 1]);
if(nums[i] != nums[cur - 1]) --i;
}
for(int i = 0; i < nums.size(); ++i)
if(nums[i] != i + 1) return i + 1;
return nums.size() + 1;
}
};