题目:
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;
}
};
本文介绍了一种在未排序整数数组中查找第一个缺失正整数的算法,该算法能在O(n)时间内运行并使用常数空间。通过示例说明了如何去除非正数并标记已出现的正数。
273

被折叠的 条评论
为什么被折叠?



