Leecode热题100-41.缺失的第一个正数

news2024/10/6 19:41:46

给你一个未排序的整数数组 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 <= 105
  • -231 <= nums[i] <= 231 - 1

解法都在代码注释里,看不懂的留言或者私信,看到第一时间解答

class Solution {
    /**假设我们的数是最理想的,一共有n个数,这n个数分别是1~n,分别放在0~n-1的位置上然后我们缺n+1,n+1就是第一个缺失的正数
    n就是我们有用的数的最大期望值
    但是我们遍历的过程中会发现一些比如是负数或者已经有过的有用的数或者大于n的数,那最大期望值就要-1了,因为现在已经有了一个没有用的值
    如果遇到位置不对的就交换到对的位置*/
    public int firstMissingPositive(int[] nums) {
        if(nums.length == 1) {
            return nums[0] == 1? 2 : 1;
        }
        /**定义最大期望值(最大的有用的值)*/
        int bestExpect = nums.length;
        /**已经确定的从1开始的连续区间的结尾*/
        int confirmedMax = 0;
        /**当前遍历的位置 */
        int cur = 0;
        /**bestExpect位置及以后都是无效的 */
        while(cur < bestExpect) {
            /**if条件的三段分别表示三种无效的数:1.小于等于已经确定的区间(包含小于0)2.大于最大期望值 3.它应该去的位置上的值和它一样  */
            if(nums[cur] == cur + 1) {
                /*如果在合适的位置扩大确定的区域 */
                cur ++;
                confirmedMax ++;
            } else if(nums[cur] <= confirmedMax || nums[cur] > bestExpect|| nums[nums[cur]-1] == nums[cur] ) {
                swap(nums, cur, --bestExpect);
            } else {
                /**有效但是不在自己该在的位置,回自己位置上去,这里cur不能++,因为它是换过来的应该继续考察 */
                swap(nums, cur, nums[cur] - 1);
            }
        }
        return confirmedMax + 1;
    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++面向对象:继承!

前言 继承是面向对象三大特性之一&#xff0c;所有的面向对象的语言都具备这三个性质&#xff0c;我们之前已经介绍过了封装的相关概念&#xff0c;今天我们来学习一下第二大特性&#xff1a;继承。 一.继承的概念 什么是继承&#xff1f; 定义&#xff1a;继承&#xff08;…

AI相关的整理

AI相关的整理 初体验记不住如何部署如何微调 整理AI学习&#xff0c;AI小白&#xff0c;业余爱好。持续更新&#xff0c;谨慎参考&#xff01; 初体验 试了一下本地直接下载安装ollama和open-webui&#xff0c;然后运行指定的模型&#xff0c;跟着文档做&#xff0c;很简单。但…

(Linux驱动学习 - 7).阻塞IO和非阻塞IO

一.阻塞IO和非阻塞IO定义 1.阻塞IO 当应用程序对设备驱动进行操作的时候&#xff0c;如果不能获取到设备资源&#xff0c;那么阻塞式IO就会将应用程序对应的线程挂起&#xff0c;直到设备资源可以获取为止。 在应用程序中&#xff0c;用户调用 open 函数默认是以阻塞式打开设备…

54.二叉树的最大深度

迭代 class Solution {public int maxDepth(TreeNode root) {if(rootnull){return 0;}int de0;Queue<TreeNode> qunew LinkedList<>();TreeNode tn;int le;qu.offer(root);while(!qu.isEmpty()){lequ.size();while(le>0){tnqu.poll();if(tn.left!null){qu.offe…

RTA-OS Port Guide学习(四)-基于S32K324 OS

文章目录 前言PerformanceMeasurement EnvironmentRAM and ROM Usage for OS ObjectsSingle CoreMulti Core Stack UsageLibrary Module SizesSingle CoreMulti Core Execution TimeContext Switching Time 总结 前言 前面一篇文章介绍了硬件的一些特性&#xff0c;本文为最后…

国内目前顶级的哲学教授颜廷利:全球公认十个最厉害的思想家

国内目前顶级的哲学教授颜廷利&#xff1a;全球公认十个最厉害的思想家 颜廷利&#xff0c;字弃安&#xff0c;号求前&#xff0c;山东济南人&#xff0c;当代著名思想家、哲学家、教育家、易经心理学家、中国第一起名大师、国际权威易学大师、中国汉字汉语研究专家、现代最著…

什么是数字化智能工厂的组成

二、数字化智能工厂的主要功能组成 数字化智能工厂主要由以下几个功能部分组成&#xff1a; 自动化生产设备&#xff1a;包括机器人、智能传感器、可编程逻辑控制器&#xff08;PLC&#xff09;等&#xff0c;用于实现生产过程的自动化操作&#xff0c;减少人力依赖&#xff0…

[C#]C# winform部署yolov11-pose姿态估计onnx模型

【算法介绍】 在C# WinForms应用中部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务。YOLOv11-Pose结合了YOLO&#xff08;You Only Look Once&#xff09;的高效物体检测算法和Pose Estimation&#xff08;姿态估计&#xff09;专注于识别人体关键点的能力&#xff0…

移动WSL到其他盘

1、首先下载 Move WSL 工具包&#xff0c;并解压。&#xff08;https://github.com/pxlrbt/move-wsl/archive/refs/heads/master.zip&#xff09; 2、管理员身份运行Windows PowerShell。 3、在PowerShell中运行如下命令&#xff0c;停止正在运行的Linux子系统。 wsl --shutd…

柯桥商务英语口语-work-shy 是什么意思?不要理解成“工作害羞”!

ork工作&#xff0c;shy是害羞&#xff0c;那么&#xff0c;work-shy是什么意思&#xff1f; 其实在 "work-shy" 这个短语中&#xff0c;"shy" 的意思并不是害羞&#xff0c;而是表达一种躲避、逃避的意思。 "work-shy" 表示对工作有一种躲避、…

深度学习基础—交并比与非极大值抑制

1.交并比 &#xff08;1&#xff09;定义 交并比是用来衡量目标检测算法的表现的函数。定义如下&#xff1a; 用预测框和真实框的面积的交集除以预测框和真实框的面积的并集&#xff0c;得到的结果本次算法预测的交并比。研究函数可以发现&#xff0c;交并比的范围为[0,1]&…

cnn突破七(四层bpnet网络公式与卷积核bpnet公式相关)

我们要有一个概念&#xff0c;就是卷积核就是我们的w1&#xff0c;w12&#xff0c;w2 那么我们的5*5卷积核怎么表达&#xff0c;当他在14*14的图像中流动时&#xff0c;对应的像素也在变化 这个和我们的上面w1&#xff0c;w12&#xff0c;w2不同&#xff0c;因为这几个都是全…

测绘地理信息赋能新质生产力

在信息化与智能化浪潮的推动下&#xff0c;测绘地理信息作为连接现实世界与数字空间的桥梁&#xff0c;正逐步成为驱动经济社会发展的新质生产力。本文旨在深入探讨测绘地理信息如何通过技术创新与应用拓展&#xff0c;为各行各业赋能&#xff0c;塑造智慧社会的新面貌。 一、…

word无法复制粘贴

word无法复制粘贴 使用word时复制粘贴报错 如下&#xff1a; 报错&#xff1a;运行时错误‘53’&#xff0c;文件未找到&#xff1a;MathPage.WLL 这是mathtype导致的。 解决方法 1&#xff09;在mathtype下载目录下找到"\MathType\MathPage\64"下的"mathpa…

第T3周:CNN实现天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 搭建CNN网络模型实现多云、下雨、晴、日出四种天气状态的识别&#xff0c;并用真实天气做预测 具体实现&#xff1a; &#xff08;一&#x…

Win10照片查看器不见了怎么办?

刚换了电脑&#xff0c;发现查看图片默认打开是window画图工具&#xff0c;看图竟然需要一张一张打开&#xff0c;超级不方便。右键图片选择打开方式也不见照片查看器&#xff0c;window自带的看图工具去哪儿了&#xff1f; 不要着急&#xff0c;我们可以把它找回来&#xff0…

windows下DockerDesktop命令行方式指定目录安装

windows下DockerDesktop指定目录安装(重新安装) 因为DcokerDesktop占用内存较大, 并且拉去镜像后占用本地空间较多,所以建议安装时就更改默认安装路径和镜像存储路径 这里,展示了从下载到安装的过程: 首先下载DcokerDesktop;找到Docker Desktop Installer.exe 并重命名为 do…

万界星空科技MES数据集成平台

制造执行系统MES作为连接企业上层ERP系统和现场控制系统的桥梁&#xff0c;承担了实时数据采集、处理、分析和传递的重要任务。MES数据集成平台是一个集成各类数据源&#xff0c;将数据进行整合和统一管理的系统&#xff0c;通过提供标准化接口和协议&#xff0c;实现数据的无缝…

上海交通大学《2022年+2023年816自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《上海交通大学816自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2022年真题 2023年真题 Part1&#xff1a;2022年2023年完整版真题 2022年真题 2023年…

强大的JVM监控工具

介绍 在生产环境中&#xff0c;经常会遇到各种各样奇葩的性能问题&#xff0c;所以掌握最基本的JVM命令行监控工具还是很有必要的 名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用…