/*给定一个含n(n>=1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。
例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4。*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define InitSize 10
typedef int ElemType;
typedef struct{
ElemType *data;
int length;
}SqList;
bool InitList(SqList &L)
{
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
L.length = 0;
return true;
}
bool FindMinInt(SqList L,int &loc)
{
int *b;
b = (ElemType*)malloc(sizeof(ElemType)*L.length);
memset(b,0,sizeof(ElemType)*L.length);
for(int i=0;i<L.length;++i)
{
if(L.data[i]<=L.length && L.data[i]>0)
b[L.data[i]-1] = 1;
}
for(int j=0;j<L.length;++j)
if(b[j] == 0)
break;
loc = j+1;
return true;
}
bool printList(SqList L)
{
for(int i=0;i<L.length;++i)
printf("%d ",L.data[i]);
printf("\n");
return true;
}
void main()
{
SqList L;
int loc;
InitList(L);
int a[4] = {-5,3,2,3};
for(int i=0;i<4;++i)
{
L.data[i] = a[i];
++L.length;
}
printList(L);
FindMinInt(L,loc);
printf("%d\n",loc);
}
03-26
1570