题目大意:给定一个未排序的数组,求这个数组确实的最小正整数是多少。
解题思路:在数组A的第i个位置保存值i + 1,
对于A[i]为负数,0,或者值大于数组大小的忽略
而A[i] != i + 1的,将A[i]的值与A[A[i] - 1]的值互换来保证A[i] 为 i + 1
最后查找哪个位置A[i] != i + 1,那么确实的最小正整数为i + 1
class Solution {
public:
int firstMissingPositive(int A[], int n) {
int i = 0;
for(i = 0; i < n;) {
if(A[i] != i + 1 && A[i] > 0 && A[i] <= n && A[i] != A[A[i] - 1]) {
swap(A[i], A[A[i] - 1]);
} else {
i++;
}
}
for(i = 0; i < n; i++) {
if(A[i] != i + 1)
break;
}
return i + 1;
}
};