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.
挺简单的,先把所有非正数的绝对值设为无限大
然后,从头枚举,若该数的绝对值小于vector大小,将其绝对值位的数设为负
枚举,第一个非负位的下标为答案
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
nums.push_back(-1);
for (int i = 0; i < nums.size(); ++ i)
if (nums[i] <= 0)
nums[i] = nums.size();
for (int i = 0; i < nums.size(); ++ i) {
int x = (nums[i] > 0) ? (nums[i]) : (-nums[i]);
if (x >= nums.size())
continue;
if (nums[x] > 0)
nums[x] *= -1;
}
for (int i = 1; i < nums.size(); ++ i)
if(nums[i] > 0)
return i;
return (int)nums.size();
}
};