您的位置:首页 > 其它

First Missing Positive

2014-09-05 12:52 169 查看
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.

思路:对于数组A,长度为n,那么first missing positive只能>= 1 && <= n+1

所以就用这个数组A作为counting sort的存储数组。在i的位置上记载i+1值得出现。比如: [-1, 1, 3, 4] 就转化为[1, 1, 3, 4]。在统计missing positive时,如果i位上的值不等于i+1则输出。

一个出错的地方:开始直接tmp=A[i]; A[i] = A[A[i]-1]; A[A[i]-1] = tmp 没有注意到在第三地交换的时候A[A[i]-1]已经不是原来的那个位置了

另一个出错的地方: 开始写成

if (A[i] > 0 && A[i] <= A.length && A[i] != i+1)
输入为[1,1]时候TLE
public int firstMissingPositive(int[] A) {
for (int i = 0; i < A.length; i++) {
if (A[i] > 0 && A[i] <= A.length && A[A[i]-1] != A[i]) {
int tmp = A[A[i]-1]; //一定要先储存A[A[i]-1],否则A[i]变了之后A[A[i]-1]位置也换了
A[A[i]-1] = A[i];
A[i] = tmp;
i--;
}
}
for (int i = 0; i < A.length; i++) {
if (A[i] != i+1) {
return i+1;
}
}
return A.length+1;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: