第一个没出现的正数
给定一个数组,从1到n,找出数组中第一个没出现的正数。
例如:
给定[1,2,0],则返回3.
给定[3,4,-1,1],则返回2.
注意:
算法需要O(n)的时间复杂度以及线性的空间复杂度。
格式:
第一行输入整数n(n<=106),接下来一行输入数组A[n],第三行输出第一个没出现的正数。
样例
输入:
5 4 2 0 1 4
输出:
3
思路很简单,就是开辟一个长度为n+1的b数组,并将其全部赋值为1,然后将输入的数组与其比对,出现过的值相应的赋值为0,最后从下标1开始查数组b,出现第一个元素值为1的就输出其下标
#include<iostream> using namespace std; int min_data(int a[],int n) { int i; int *b=new int[n+1]; for(i=0;i<=n;i++) b[i]=1; for(i=0;i<n;i++) if(a[i]>-1) b[a[i]]=0; for(i=1;i<=n;i++)//下标从1开始是是因为b[0]表示的是0这个数 if(b[i]==1) { delete[]b; return i; } } int main() { int n,i; cin>>n; int *a=new int[n]; for(i=0;i<n;i++) cin>>a[i]; cout<<min_data(a,n); delete[]a; return 0; }