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;
};

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

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

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

相关推荐
仙人球部落2 分钟前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
Yang_jie_0320 分钟前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
2301_8008951032 分钟前
信息安全数学基础复习
算法
爱折腾的小黑牛40 分钟前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
Starmoon_dhw1 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
sunfdf1 小时前
Next.js 新手从零部署到首跑实战指南
开发语言·javascript·ecmascript
SmartBoyW1 小时前
前端死磕:一文彻底搞懂 JS 事件循环 (Event Loop) 与宏微任务
前端·javascript
海石2 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy2 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石2 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode