题目
给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4。
题解
分析
遍历A数组,利用辅助动态数组,类似之前提到过的,元素值作为数组下标。第一个为0的值即是所求的最小正整数。
代码
int findmin(int A[], int n){
int *B = (int *)malloc(sizeof(int) * n);
for(int i=0;i<n;i++)
B[i]=0;
for(int i=0;i<n;i++){
if(A[i]>0 && A[i]<n)
B[A[i]-1]++;
}
for(int i=0;i<n;i++)
if(B[i]==0)
break;
return i+1;
}
该博客介绍了如何在一个整数数组中高效地找出未出现的最小正整数。通过创建一个辅助动态数组,将元素值作为数组下标的策略,遍历原数组并更新对应位置的计数。当找到第一个计数为0的元素时,其下标加1即为所求的最小正整数。这种方法在时间效率上表现出色。
2106

被折叠的 条评论
为什么被折叠?



