public class Solution {
public int firstMissingPositive(int[] A) {
if (A == null || A.length == 0) {
return 1;
}
int min = Integer.MAX_VALUE;
for (int a : A) {
if (a > 0) {
min = Math.min(a, min);
}
}
if (min != 1) {
return 1;
}
for (int i = 0; i < A.length; i++) {
while (true) {
int a = A[i];
if (a > 0 && a <= min + A.length - 1) {
int b = A[a - min];
if (b != a) {
A[a - min] = a;// swap
A[i] = b;
} else {
break;
}
} else {
break;
}
}
}
for (int i = 0; i < A.length; i++) {
if (A[i] != min + i) {
return min + i;
}
}
return A[A.length - 1] + 1;
}
public static void main(String[] args) {
Solution s = new Solution();
int[] A = new int[] { 3,4,-1,1 };
int b = s.firstMissingPositive(A);
System.out.println(b);
}
}
这是一道非常有意思的题目。
思路很难想到,我就没想到,是以前看过别人的解答。
知道思路后程序实现也有不少坑。