• leetcode每日一题(2020-06-27):41. 缺失的第一个正数


    题目描述:
    给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

    今日学习:
    1.emmmm没有什么特别的

    题解:
    这道题要是不要求时空复杂度就简单得很,所以题解1是我自己胡乱写的不符合时间要求的
    题解2.原地交换数组
    题解3.标记数组

    var firstMissingPositive = function(nums) {
        if(nums.length == 0) return 1
        nums = Array.from(new Set(nums))    //不符合要求
        nums.sort((a, b) => a - b)          //不符合要求
        let i = 0
        while(nums[i] < 0) {
            i++
        }
        if(nums[i] > 1 || i == nums.length) return 1
        for(i; i < nums.length; i++) {
            if(i != nums.length - 1) {
                if(nums[i + 1] - nums[i] == 1) {
                    continue
                } else {
                    return nums[i] + 1
                }
            }else {
                return nums[i] + 1
            }
        }
    };
    //原地修改数组
    const firstMissingPositive = (nums) => {
      for (let i = 0; i < nums.length; i++) {
        while (
          nums[i] >= 1 &&              
          nums[i] <= nums.length &&     // 对1~nums.length范围内的元素进行安排
          nums[nums[i] - 1] !== nums[i] // 已经出现在理想位置的,就不用交换
        ) {
          const temp = nums[nums[i] - 1]; // 交换
          nums[nums[i] - 1] = nums[i];
          nums[i] = temp;
        }
      }
      // 现在期待的是 [1,2,3,...],如果遍历到不是放着该放的元素
      for (let i = 0; i < nums.length; i++) {
        if (nums[i] != i + 1) { // 比如 [1,3,4,...]
          return i + 1;         // 返回 2
        }
      }
      return nums.length + 1; // 发现元素 1~nums.length 占满了数组,一个没缺
    };
    //标记数组
    var firstMissingPositive = function(nums) {
        const n = nums.length
        for(let i = 0; i < n; i++) {
            if(nums[i] <= 0) nums[i] = n + 1
        }
        for(let i = 0; i < n; i++) {
            let num = Math.abs(nums[i])
            if(num <= n)
            nums[num - 1] = -Math.abs(nums[num - 1])
        }
        for(let i = 0; i < n; i++) {
            if(nums[i] > 0)
            return i + 1
        }
        return n + 1
    }
    
  • 相关阅读:
    3.for in循环
    2.break与continue
    1.XHTML框架结构
    lamda表达式在EF中的应用
    View数据呈现相关技术
    ASP.NET MVC 4 技术讲解
    ASP.NET MVC 相关的社群与讨论区
    C# 随机红包算法
    圆圈里带 小写字母,大写字母
    使用SQL语句 检测 MSSQL死锁
  • 原文地址:https://www.cnblogs.com/autumn-starrysky/p/13197614.html
Copyright © 2020-2023  润新知