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.
swap
class Solution {
public:
int firstMissingPositive(int A[], int n) {
int i, An = 0;
for (i = 0; i < n; ++i)
while (A[i] != i)
if (A[i] >= 0 && A[i] < n && A[A[i]] != A[i])
swap(A[i], A[A[i]]);
else if (A[i] == n) {
An = n;
break;
}
else
break;
for (i = 1; i < n; ++i)
if (A[i] != i)
return i;
if (An)
return An + 1;
else
return n ? n : 1;
}
};Here is a TLE version, find the bug:
class Solution {
public:
int firstMissingPositive(int A[], int n) {
for (int i = 1; i <= n; ++i) {
while (A[i-1] != i && A[i-1] >= 1 && A[i-1] <= n) {
swap(A[i-1], A[A[i-1]-1]);
}
}
for (int i = 1; i <= n; ++i)
if (A[i-1] != i)
return i;
return n+1;
}
};AC Code:
class Solution {
public:
int firstMissingPositive(int A[], int n) {
for (int i = 1; i <= n; ++i) {
while (A[i-1] != i && A[i-1] >= 1 && A[i-1] <= n && A[A[i-1]-1] != A[i-1]) {
swap(A[i-1], A[A[i-1]-1]);
}
}
for (int i = 1; i <= n; ++i)
if (A[i-1] != i)
return i;
return n+1;
}
};

本文介绍了一种在未排序整数数组中寻找第一个缺失正整数的算法,该算法能在O(n)时间内运行并使用常数空间。通过具体示例展示了如何实现这一算法,并对比了两种不同版本的代码实现,帮助理解关键步骤。
273

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



