系列目录:
文图介绍
列如数组A:未出现的最小正整数为5
A 1 2 3 4
一、实现算法思想:
方法一:
创建一个计数为min,初始化min的值为1,依次比较数组的值,如果没有那么min就等于1;
如果有,则min+1,再次比较。直到没有为止!
方法二:
创建一个和数组A一样大小为n的数组B,并初始化为0,判断A数组是否存在1-n之间的数(最小未出现正整数的范围在1-n+1,故大于n或小于1的数不用考虑),如果存在,则让B数组的对应的下标[A[i]-1]=1,标记为1,直到数组扫描完。
再扫描数组B,第一个出现为0的元素就是最小值,即数组下标加1。
提示:自己动手画图后思路更加清晰 !
二、实现代码
//方法一:
int FindNotExistSmall(int A[], int n)
{
int min = 1;
while (min<=n+1)
{
for (int i = 0; i < n; i++)
{
if (min == A[i])
{
break;
}
if (i == n - 1)//如果没有说明就到了最后一个
{
return min;
}
}
min++;
}
}
//方法二:
int FindNotExistSmall(int A[])
{
int i;
int B[n]={0};//初始为0
for ( i = 0; i < n; i++)
{
if (A[i]>0&&A[i]<=n)
{
B[A[i] - 1] = 1;//如果1出现了,则在下标为0位置标记为1,5出现了则,下标为4的位置标记为1
}
}
for ( i = 0; i < n; i++)//再扫描B数组
{
if (B[i]==0)
{
break;//碰到第一个为0直接结束
}
}
return i + 1;//下标加1为最小值
}
三、运行结果
自己运行
四、总结
以上就是本章要讲的内容,本文简单介绍了怎么样查找未出现的最小正整数,提供了能使我们快速便捷地思路和方法。
本文含有隐藏内容,请 开通VIP 后查看