41. First Missing Positive
Hard
2327669FavoriteShare
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1
Note:
Your algorithm should run in O(n) time and uses constant extra space.
- 思路借鉴:https://www.cnblogs.com/grandyang/p/4395963.html
- 还是使用交换的手法,将[1,n-1]之间的数字交换到他应该在的位置,然后再进行一次遍历,得出没有放置应有数字的位置:
- Runtime: 0 ms, faster than 100.00% of C++ online submissions for First Missing Positive.
- Memory Usage: 8.7 MB, less than 76.00% of C++ online submissions for First Missing Positive.
- Next challenges:
- Couples Holding Hands
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
if(n==0) return 1;
for(int i=0;i<n;i++){
if(nums[i]>0 && nums[i]<n && nums[nums[i]-1]!=nums[i]){
swap(nums[i],nums[nums[i]-1]);
i--;
}
}
for(int i=0;i<n;i++){
if(nums[i]!=i+1) return i+1;
}
return n+1;
}
};