在非负数组(乱序)中找到最小的可分配的id(从1开始编号),数据量10000000。
第一种排序+线性查询
#include<iostream>
#include<algorithm>
using namespace std;
int arr[10000000];
int n;
int result;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
for(int i=0;i<n;i++)
{
if(arr[i]!=i+1)
result=i+1;
}
if(result)
cout<<result;
else
cout<<n+1;
return 0;
}
第二种辅助空间
#include<iostream>
#include<algorithm>
using namespace std;
int arr[10000002];
int help[10000002];
int n;
int result;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
help[arr[i]]=1;
}
for(int i=1;i<=n;i++)
{
if(!help[i])
{
result=i;
break;
}
}
if(result)
cout<<result;
else
cout<<n+1;
return 0;
}