Leetcode 41.缺失的第一个正数 JavaScript (Day 7)

javascript 复制代码
var firstMissingPositive = function(nums) {
   const n=nums.length;
   for(let i=0;i<n;i++){
        while(nums[i]>0&&nums[i]<=n&&nums[i]!=nums[nums[i]-1]){
                const j=nums[i]-1;
                [nums[i],nums[j]]=[nums[j],nums[i]];
        }
    }
    
    for(let i=0;i<n;i++){
        if(nums[i]!=i+1) return i+1;
    }
    return n+1;
};

算法核心:先通过循环交换,使得每个位置上的值是与其索引相对应的,比如nums[0]=1,nums[1]=2...负数和0不管直接跳过,重复的也直接跳过,排序完之后,遍历数组,如果nums[i]!=i+1,说明i+1就是缺失的正数,如果全部都符合,就返回n+1
算法注意点:循环的终止条件

javascript 复制代码
nums[i]!=nums[nums[i]-1]

我们不要用nums[i]!=i+1这个条件,因为nums[i]!=nums[nums[i]-1]不仅可以包括前面的那个条件,还可以跳过重复的数比如数组[1,1,2]

相关推荐
张元清9 分钟前
SSR 状态管理陷阱:defineStore vs defineContextStore
前端·javascript·面试
一只小小的芙厨11 分钟前
KMP总结
算法
生成论实验室1 小时前
《事件关系阴阳博弈动力学:识势应势之道》第十一篇:双脑协同——WOLM与大模型的共生智能
人工智能·算法·语言模型·架构·创业创新
openKaka_1 小时前
为什么 React 18 之后使用 createRoot,而不是 ReactDOM.render
前端·javascript·react.js
WindrunnerMax1 小时前
基于 Markdown-It 的无序列表折叠插件
前端·javascript·github
上弦月-编程1 小时前
高效编程利器:转移表技术解析
c语言·开发语言·数据结构·算法·排序算法
薇茗1 小时前
【初阶数据结构】 左右逢源的分支诗律 二叉树2
c语言·数据结构·算法·二叉树
神三元1 小时前
最近半年,我做了个 AI-Native 的 Agent 从零到进阶教程
前端·javascript·面试
AZaLEan__1 小时前
算法考核题解
算法
MediaTea1 小时前
AI 术语通俗词典:ID3 算法
人工智能·算法