//给定一个含n(n>=1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1,数组{1,2,3}中未出现的最小正整数是4。
include <stdio.h>
include <stdlib.h>
include <string.h>
define MAXSIZE 100
int findMissMin(int A[],int n){
int i,B;
B=(int )malloc(sizeof(int)n);//分配空间
memset(B,0,sizeof(int)n);//赋初值为0
for ( i = 0; i < n; i++)
{
if(A[i]>0&&A[i]<=n){//若A[i]的值介于1-n,则标记数组B
B[A[i]-1]=1;
}
}
for ( i = 0; i < n; i++)//扫描数组B,找到目标值
{
if(B[i]==0){
break;
}
}
return i+1;//返回结果
}
int main(){
int n,i,A[MAXSIZE];
printf("请输入整数的个数:");
scanf(" %d",&n);
printf("请输入含n个整数的数组:");
for ( i = 0; i < n; i++)
{
scanf("%d",&A[i]);
}
printf("数组中未出现的最小正整数是:%d",findMissMin(A,n));
printf("\n");
}