此题的题意需要好好理解一下,给的n表明数组中最大的数应该是n,数组A中本应该包括的数是1,2.....n,
根据这一点,方法如下:
第一遍遍历数组时将A[i]在1...n中间的数放在数组下标为i+1中,
第二遍遍历时若发现第一个A[i]!=i+1, 即为第一个不满足的正数
代码
class Solution {
public:
int firstMissingPositive(int A[], int n) {
if(n==0)
return 1;
for(int i = 0; i < n; ++i)
{
if(A[i]<=n&&A[i]>0&&A[A[i]-1]!=A[i])
{
int temp = A[A[i]-1];
A[A[i]-1] = A[i];
A[i] = temp;
--i;
}
}
for(int i = 0; i < n; ++i)
{
if(A[i]!=i+1)
return i+1;
}
return n+1;
}
};