当前位置: 首页 > 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
    }
}

相关文章:

  • 可狱可囚的爬虫系列课程 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个元素页面不卡顿
  • 迅睿cms建站/爱站网关键字挖掘
  • 网站首页流程图/优化关键词排名提升
  • 网站建设seo优化/企业网站多少钱一年
  • 怎么做便民信息网站/离我最近的广告公司
  • 幼儿园网站建设奖励方案/seo文章是什么意思
  • php 网站版面素材/seo算法培训