41. First Missing Positive
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] = i + 1;那么将数字n放在index为n-1的位置即可。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for(int i = 0; i < n; i++){
//将数组中大于0的元素放到正确的位置上,例如5放到nums[4]
while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){
swap(nums[i], nums[nums[i] - 1]);
}
}
for(int i = 0; i < n; i++){
if(nums[i] != i + 1)
return i+1;
}
return n +1;
}
};