题目:
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(int A[], int n) {
removeNonPositive(A, n);
//使用负号记下是否出现
for(int i = 0; i < n; i++) {
if(abs(A[i]) <= n) {
if (A[abs(A[i])-1] > 0)
A[abs(A[i])-1] *= -1;
}
}
for(int i = 0; i < n; i++)
if(A[i] > 0)
return i+1;
return n+1;
}
private:
//去除数组中小于等于0的数
void removeNonPositive(int A[], int &n) {
int k = 0;
for(int i = 0; i < n; i++) {
if(A[i] > 0)
A[k++] = A[i];
}
n = k;
}
};