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.
题目意思就是给出一组未排序的数组,找到第一个缺失的正整数,不能排序,不能分配内存,思路就是交换数组元素使得位置0,对应值1,位置1,对应值2,然后找到第一个不匹配的位置,就是结果。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int sz = nums.size();
int now, next;
for(int i = 0; i < sz; i++){
if(i + 1 != nums[i] && nums[i] > 0){//
now = nums[i];
while(now - 1 >= 0 && now - 1 < sz && nums[now - 1] != now){
next = nums[now - 1]; //把目标先存起来
nums[now - 1] = now; //改变目标值
now = next; //下一个
}
}
}
for(int i = 0; i < sz; i++){
if(nums[i] != i + 1)
return i + 1;
}
return sz + 1;
}
};