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

相关推荐
猫猫不是喵喵.4 分钟前
Vue2 的 Vuex 状态管理与 Vue3 的 Pinia 状态管理
前端·javascript·vue.js
Jerry5 分钟前
LeetCode 78. 子集
算法
DuHz42 分钟前
论文解读:用于数据分析的极值点对称模态分解方法 (Extreme-point Symmetric Mode Decomposition,ESMD)
论文阅读·算法·信息与通信·信号处理
看昭奚恤哭1 小时前
Flutter 布局核心思想
开发语言·javascript·flutter
HZZD_HZZD1 小时前
用电负荷聚类分析实战:基于`scikit-learn`的`K-Means`与`DBSCAN`双算法对比、`PCA`降维可视化与智能电表负荷画像全流程
算法·scikit-learn·kmeans
MIngYaaa5201 小时前
2026暑期牛客多校1 2026-7-17
数据结构·算法
wabs6661 小时前
关于图论【卡码网107.寻找存在的路线的思考】
数据结构·算法·图论
朝阳5811 小时前
Cesium `Camera.flyTo`:“飞过去“
javascript
半兽先生1 小时前
大模型技术开发与应用——4.大模型提示词工程实战
人工智能·算法
wuminyu2 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法