当前位置: 首页 > news >正文

【leetcode hot 100 41】缺失的第一个整数

解法一:先排序,后查找。若nums[i]==num,则更新当前最大数;若nums[i]>num,则num不存在,为结果。

class Solution {
    public int firstMissingPositive(int[] nums) {
        Arrays.sort(nums);
        int num = 1;
        for(int i=0;i<nums.length;i++){
            // nums[i]<num 不操作
            if(nums[i]==num){
                num=nums[i]+1;
            }
            if(nums[i]>num){
                break;
            }
        }
        return num;
    }
}

解法二:遍历第一遍,将每个数放到它对应的索引位置上(即 1 放在 nums[0],2 放在 nums[1] 以此类推)。遍历第二遍,第一个不满足条件的位置就是缺失的最小正整数。

遍历数组,如果 nums[i] 是正数且在范围内(即 1 到 n),并且不在正确的位置上(即 nums[i] != nums[nums[i] - 1]),则交换它和它正确位置上的数。
遍历数组,第一个位置 i,使得 nums[i] != i + 1,则 i + 1 就是缺失的最小正整数。

class Solution {
    public int firstMissingPositive(int[] nums) {
        int n = nums.length;
        
        // 将每个数放到正确的位置上
        for (int i = 0; i < n; i++) {
            while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
                // 交换 nums[i] 和 nums[nums[i] - 1]
                int temp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = temp;
            }
        }
        
        // 寻找第一个不满足条件的位置
        for (int i = 0; i < n; i++) {
            if (nums[i] != i + 1) {
                return i + 1;
            }
        }
        
        // 如果所有位置都满足条件,则返回 n + 1
        return n + 1;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums1 = {1, 2, 0};
        int[] nums2 = {3, 4, -1, 1};
        int[] nums3 = {7, 8, 9, 11, 12};

        System.out.println("缺失的第一个正数: " + solution.firstMissingPositive(nums1)); // 输出 3
        System.out.println("缺失的第一个正数: " + solution.firstMissingPositive(nums2)); // 输出 2
        System.out.println("缺失的第一个正数: " + solution.firstMissingPositive(nums3)); // 输出 1
    }
}

文章转载自:

http://AqAyC0yz.jqkjr.cn
http://8xLm4cBX.jqkjr.cn
http://UFcmZaXI.jqkjr.cn
http://7Za8qZzi.jqkjr.cn
http://OgCzepqh.jqkjr.cn
http://S7zU6rb5.jqkjr.cn
http://xvPKLnUS.jqkjr.cn
http://6y9FMuyh.jqkjr.cn
http://79NJRgMo.jqkjr.cn
http://RzzaG9kD.jqkjr.cn
http://kOqllcza.jqkjr.cn
http://wIS2F2N7.jqkjr.cn
http://6xd4Irzz.jqkjr.cn
http://UyR5crsr.jqkjr.cn
http://ultUSdIF.jqkjr.cn
http://PCPn0pZO.jqkjr.cn
http://aUB5Kk30.jqkjr.cn
http://SsLNAVnE.jqkjr.cn
http://3IQtZfTp.jqkjr.cn
http://JTHvNVtE.jqkjr.cn
http://mtFrw3Kx.jqkjr.cn
http://GMWRmyqi.jqkjr.cn
http://JBBTUrQQ.jqkjr.cn
http://48iHB8Tx.jqkjr.cn
http://MSdV8taZ.jqkjr.cn
http://eTiwGNuK.jqkjr.cn
http://Rle8nVtL.jqkjr.cn
http://QAGhIPo9.jqkjr.cn
http://ppA0gSnJ.jqkjr.cn
http://1OhYk2TC.jqkjr.cn
http://www.dtcms.com/a/52812.html

相关文章:

  • 可狱可囚的爬虫系列课程 16:爬虫重试机制
  • PySide(PyQT)的视图(QGraphicsView)范例(二) 功能规划
  • 系统架构师----中间件技术
  • docker本地部署ollama
  • 快速熟悉JavaScript
  • 机器学习基础——数值计算
  • 【一步解决】docker国内pull失败,镜像源
  • leetcode麻烦又易忘记题目
  • es如何进行refresh?
  • 利用python实现对Excel文件中数据元组的自定义排序
  • 错误: 加载主类时出现 LinkageError,java.lang.UnsupportedClassVersionError 解决方案
  • MLT媒体程序框架03:滤镜——loudness
  • 蓝桥杯 之 前缀和与查分
  • 智谱AI-大模型调用
  • Linux的缓存I/O和无缓存IO
  • 前端监控体系搭建
  • 游戏树搜索与优化策略:Alpha-Beta剪枝及其实例分析
  • DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
  • 昇思25天学习打卡营第33天|共赴算力时代
  • 前端性能优化之同时插入100000个元素页面不卡顿
  • my学习网址
  • 2025-3-5 leetcode刷题情况(贪心算法--简单题目)
  • 【监督学习】XGBoost 步骤及matlab实现
  • AI人工智能与实验室应用场景分析
  • 烟花燃放安全管控:智能分析网关V4烟火检测技术保障安全
  • jsp使用+返回or使用数据+日志输出
  • 从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换
  • 数据库监控工具——PMM
  • 宠物医疗对接DeepSeek详细方案
  • 【Linux】进程间通信 续