找出第一个“缺失”自然数

https://www.cnblogs.com/zhanghongfeng/p/11696533.html
给定一个未排序的整数数组,找出其中没有出现的最小的自然数。这里假设自然数是从0开始。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 0
示例 3:
输入: [0,8,9,11,12]
输出: 1
一个长度为n的数组,它的最小值排列应该是(0,1,2,...,n - 1),所以对一个长度为n的数组而言,缺失的最小自然数一定在区间[0, n]内。
解法:我们可以借助索引的方法,将各个值放入到其对应的索引中去,比如说,如果a[0]=0,则值0已经放到了正确位置;如果a[0]=1,则值1应该放到1号位置让a[1]=1,即需要交换a[0]和a[1]的值。如果数组中某个数的值为负数或者大于等于数组长度n那不用处理它。
结果求取:上面的处理后能保证在数组长度范围内的数(0-n-1)都在其索引的位置上,变相起到了排序的功能。最后遍历数组,看下a[i]是否是和i相等。如果不是,则缺失的最小自然数就是i,如果全都相等则缺失的最小自然数是n。

int firstNumber(int a[], int len)
{
    for (int i = 0; i < len; ++i)
    {
        if (a[i] != i && a[i] >= 0 && a[i] < len)
        {
            swap(a[i], a[a[i]]);
        }
    }
    for (int i = 0; i < len; ++i)
    {
        if (a[i] != i)
        {
            return i;
        }
    }
    return len;
}
全部评论
你这很明显有问题啊
点赞 回复 分享
发布于 2023-05-08 12:39 北京

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务