题目描述
给定一个未分类的整型数组,找到第一个缺少的正整数。
例如,
给定[1,2,0] return3
和[3,4,-1,1] return2。
你的算法应该在O(n)时间运行并且使用恒定的空间。
#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
int n;
cin>>n;
int A[n];
int ans=0;
for(int i=0;i<n;i++){
cin>>A[i];
}
sort(A,A+n);
int min=A[0];
int max=A[n-1];
if((max-min)<n)
{
if(min<=0&&max>=0){
ans=max+1;
}
else{
ans=1;
}
}
if((max-min)>=n)
{for(int j=0;j<n-1;j++){
if((A[j+1]-A[j])>1&&A[j]>=0){
ans=A[j]+1;
break;
}
}}
cout<<ans<<endl;
}
//更优解
/*
int firstMissingPositive(int A[], int n) {
for(int i=0;i<n;i++)
{
int x = A[i];
while(x>0 && x<=n && A[x-1]!=x)
swap(x, A[x-1]);
}
for(int i=0;i<n;i++)
if(A[i] != i+1)
return i+1;
return n+1;
*/