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

力扣41缺失的第一个正数

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

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。

示例 2:

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。

示例 3:

输入:nums = [7,8,9,11,12]
输出:1
解释:最小的正数 1 没有出现。

解法:将大于等于1并且小于nums.length的数字nums[i]存放在

nums[nums[i] - 1]上,

例如[3,4,-1,1],3放在nums[2]的位置上,跟 -1进行交换,然后进入while循环判断 -1 的位置

第一个for循环结束后,在由第二个for循环判断位置上的元素跟下标+1是否对应的上,对应不上则说明该位置元素就是解,即return i+1,如果都对应的上,那就返回数组长度+1

class Solution {
    public int firstMissingPositive(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            while(nums[i] >= 1 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]){
                  //交换
                int temp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = temp;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if(nums[i] != i + 1){
                return i + 1;
            }
        }
        return nums.length + 1;
    }
}


http://www.kler.cn/a/532138.html

相关文章:

  • doris:导入时实现数据转换
  • 2025 年 YOLO 十大未来应用场景
  • FPGA 时钟多路复用
  • deepseek 本地化部署和小模型微调
  • 网络原理(4)—— 网络层详解
  • HarmonyOS简介:应用开发的机遇、挑战和趋势
  • UE学习日志#21 C++笔记#7 基础复习7 string和string_view1
  • MySQL-索引下推
  • OpenAI 正式推出Deep Research
  • 网络工程师 (17)通信系统概述
  • ip数据报考研
  • .Net Core笔记知识点(跨域、缓存)
  • 【HTML性能优化】提升网站加载速度:GZIP、懒加载与资源合并
  • I-Wire单总线通信
  • 蓝桥杯备考:前缀和算法之最大子段和
  • Haskell语言的测试开发
  • 登录认证(6):拦截器:Interceptor
  • 进程间的数据桥梁:`multiprocessing.Queue` 的应用
  • MATLAB中extractBefore函数用法
  • 解锁C/C++:链表数据结构的奇幻之旅
  • Docker入门篇(Docker基础概念与Linux安装教程)
  • 课题推荐——基于自适应滤波技术的多传感器融合在无人机组合导航中的应用研究
  • 大模型系列21-AI聊天机器人
  • 生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
  • TFTP 介绍
  • Rust 语言入门