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.
困惑:为什么没有[6,7] 答案为5这种测试样例???不理解。。。Accept答案是i位置保存i+1元素,这样最后访问的时候有不能对应的地方即是答案。
class Solution {
public int firstMissingPositive(int[] A) {
if (A == null || A.length < 1) return 1;
//把小于等于A.length的正数A[i]放到第A[i]-1个位置上
for (int i = 0; i < A.length; i++) {
while (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[i] = tmp;
}
}
for (int i = 0; i < A.length; i++) {
if (A[i] != i + 1) {
return i + 1;
}
}
return A.length + 1;
}
}