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.
思路:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if (nums.empty()) return 1;
if (nums.size() == 1){
if (nums[0] == 1) return 2;
else return 1;
}
sort(nums.begin(), nums.end());
if (nums[0] > 1) return 1;
for (int i = 0; i < nums.size() - 1; i++){
if (nums[i + 1] - nums[i]>1){
if (nums[i] <= 0 && nums[i + 1] > 1) return 1;
if (nums[i] >= 1) return nums[i] + 1;
}
}
if (nums[nums.size() - 1] <= 0) return 1;
//if (nums[nums.size() - 1] > 1) return 1;
else
return nums[nums.size() - 1] + 1;
}
};