【问题描述】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。
【输入形式】
第一行包括一个整数n,第二行为n个整数,以空格分开
【输出形式】
数组中未出现的最小正整数
【样例1输入】
3
1 2 3
【样例1输出】
4
【样例2输入】
4
-5 3 2 3
【样例2输出】
1
#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100
typedef struct
{
int * elem;
int length;
int listsize;
}sqlist;
int MinInteger(sqlist &L)
{
int *p=L.elem;
int min = 1;
while(p<L.elem+L.length)
{
if(min==*p)
{ min++;
p=L.elem;
}
else
p++;
}
return min;
}
int InitList(sqlist &L)
{
L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) exit(-1);
L.listsize = LIST_INIT_SIZE;
return 1;
}
int main()
{
sqlist L;
scanf("%d",&L.length);
InitList(L);
int i=0;
for(i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
printf("%d",MinInteger(L));
}