题目:
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.
解法1:
不考虑空间复杂度,用set将所有的正数存进去,找到最大值,从1开始到最大值依次找,如果set中没有,即为首个缺失的正数,遍历完成后,说明缺失的正数是最大值加1
c++:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int maxNum = 0;
unordered_set<int> s;
for(int num : nums){
if(num > 0){
s.insert(num);
maxNum = max(maxNum, num);
}
}
for(int i = 1; i <= maxNum; ++i){
if(!s.count(i)) return i;
}
return maxNu