首页 > 其他分享 >41. 缺失的第一个正数(难)

41. 缺失的第一个正数(难)

时间:2024-11-04 11:08:16浏览次数:1  
标签:正整数 nums 示例 最小 41 数组 集合 正数 缺失

目录

题目

  • 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。

示例 2:

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。

法一、集合

  • 从1开始用集合的O(1)的查询是否在nums中,不在就返回当前数字
var firstMissingPositive = function(nums) {
    //从1开始用集合的O(1)的查询是否在nums中,不在就返回当前数字
    const Newnums=new Set(nums)
    //范围i<=nums.length+1:数组如果按顺序应该缺少的是nums.length+1,如果中间有跳跃的,那么正常顺序的i缺失的一定在nums长度范围内
    for (let i=1;i<=nums.length+1;i++){
        if(!Newnums.has(i)){
            return i
        }
    }
};

法二、桶排:把nums数组里面的元素放到对应位置上

  • 数组里面最小的正整数 一定在1到nums.lenght+1之间。如 nums.length = 6; 那最小的正整数一定在1-7之间,应为 nums有可能为[1,2,3,4,5,6],那没有出现最小的正整数就为7 因为6个位置已占满了。如果数组为[1,2,555,4,5,6];3没有出现 最小的正整数就为3
var firstMissingPositive = function(nums) {
    let n=nums.length
    for(let i=0;i<n;i++){
        //交换的情况,不能用if,当交换后当前有可能还需要处理会出错
        while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] !== nums[i]){
            let temp = nums[i];
            nums[i] = nums[temp - 1];
            nums[temp - 1] = temp;
        }
    }
    //遍历一遍处理后的数组,找到下标与当前位置不符合的第一个数返回
    for (let i=0;i<n;i++){
        if(nums[i]!==i+1){
            return i+1
        }
    }
    return n+1//如果都符合就返回数组长度+1
};

标签:正整数,nums,示例,最小,41,数组,集合,正数,缺失
From: https://www.cnblogs.com/lushuang55/p/18524710

相关文章

  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第七周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • 学期 2024-2025-1 学号 20241403 《计算机基础与程序设计》第六周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标Polya......
  • 2024-2025-1 20241411王思棋计算机基础与程序设计第6周学习总结
    |这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||-- |-- ||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06||这个作业的目标|Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂......
  • 2024-2025-1 20241428张雄一《计算机基础与程序设计》第六周工作总结
    学期(如2024-2025-1)学号(如:20241428)《计算机基础与程序设计》第6周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业的目标<写上具体方面>作业正文https://i.cnblogs.com/posts/edit教材学习内容总结时间复杂度......
  • 2024-2025-1 20241304 《计算机基础与程序设计》第6周学习总结
    2024-2025-120241304《计算机基础与程序设计》第6周学习总结作业信息|这个作业属于哪个课程|<[2024-2025-1-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05)|>|-- |-- ||这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设......
  • 学期2024-2025-1 学号20241424 《计算机基础与程序设计》第7周学习总结
    学期2024-2025-1学号20241424《计算机基础与程序设计》第7周学习总结作业信息|这个作业属于2024-2025-1-计算机基础与程序设计)||-- |-- ||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01||这个作业的目标|参考上面的学习总结模板,把学习过程通过......
  • 2024-2025-1 20241327 《计算机基础与程序设计》 第六周学习总结
    作业信息|2024-2025-1-计算机基础与程序设计)||--|-|2024-2025-1计算机基础与程序设计第六周作业)||快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题|作业正文|https://www.cnblogs.com/shr060414/p/18440575|教......
  • 20241103 训练记录
    杂题选讲OmkarandLandslide可以发现,我们把一轮操作分解成对每个位置的单个操作,那么这些单个操作的顺序是可以随意调换的。由于最后一定会操作到不能继续操作为止,这样一轮一轮的操作就可以等价为:顺序操作\(1\)到\(n\)的每个位置,若这个点能向前滑坡,就一直滑到不能滑为止。......
  • 学期2024-2025-1 学号20241306 《计算机基础与程序设计》第6周学习总结
    学期(如2024-2025-1)学号(如:20241300)《计算机基础与程序设计》第X周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里[2024-2025-1计算机基础与程序设计第6周作业(ht......
  • 2024-2025-1 20241409司马平珏《计算机基础与程序设计》第六周工作总结
    作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06作业目标:Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂度、递归、代码安全作业正文:https://www.cnblogs.......