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]

相关推荐
_小草鱼_3 分钟前
【搜索与图论】DFS算法(深度优先搜索)
算法·深度优先·图论·回溯·递归
I_LPL30 分钟前
hot100 栈专题
算法·
小J听不清38 分钟前
CSS 外边距(margin)全解析:取值规则 + 实战用法
前端·javascript·css·html·css3
2401_8795034142 分钟前
C++中的观察者模式变体
开发语言·c++·算法
前端小超超1 小时前
Vue计算属性computed:可写与只读的区别
前端·javascript·vue.js
阿贵---1 小时前
C++中的备忘录模式
开发语言·c++·算法
setmoon2141 小时前
C++中的观察者模式实战
开发语言·c++·算法
2403_835568471 小时前
C++代码规范化工具
开发语言·c++·算法
tankeven2 小时前
HJ138 在树上游玩
c++·算法
lihihi2 小时前
P1209 [USACO1.3] 修理牛棚 Barn Repair
算法