正数要连续起来,找到第一个缺失的正数。
大致思路:
刚开始想着用动态规划什么的,发现要O(n)即不能sort,而且不能用空间,所以dp数组打扰了。
一看题解....好简单....:
Put each number in its right place.
For example:
When we find 5, then swap it with A[4].
At last, the first place where its number is not right, return the place + 1.
AC代码:
class Solution {
public:
int firstMissingPositive(int A[], int n) {
if(n==0)
return 1;
for(int i=0;i<n;i++)
{
while(A[i]>0 && A[i]<n && A[A[i]-1]!=A[i]) //放到该放的地方 比如5应该放到A[4]
{
swap(A[A[i]-1],A[i]);
}
}
for(int i=0;i<n;i++)
{
if(A[i]!=i+1)
return i+1;
}
return A[n-1]+1;
}
};