力扣(LeetCode)41. 缺失的第一个正数(C++)

news2024/11/29 12:48:27

类计数排序

小于 1 1 1 ,大于 n n n 的数,不会对答案造成影响。所以只要考虑 1 — — n 1——n 1n 的数。

由于题目要求 O ( 1 ) O(1) O(1) 空间,参考计数排序思想,利用原数组 n u m s nums nums 存储 1 — — n 1——n 1n ,需要将 1 — — n 1——n 1n 的下标映射到 0 — — n − 1 0——n-1 0n1 , 这一步等同于判断 n u m s [ i ] nums[i] nums[i] i + 1 i+1 i+1 是否相等。如果相等,说明 i i i 存的数正确,如果不相等,将 n u m s [ i ] nums[i] nums[i] 存到它该存的位置 , 即减 1 1 1 映射后的下标 n u m s [ i ] − 1 nums[i]-1 nums[i]1

每一次交换会把一个数放在该放的位置,一次遍历,所有数的位置确定。最后从小到大,枚举每个位置是否存放相应的数,如果缺失,返回缺失值,即为所求。

提示 : 如果有重复元素,他们对应同一位置,造成死循环,在循环条件里一定要判重。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0;i<n;i++){
            while(nums[i]>0&&nums[i]<=n&&nums[i]!=i+1&&nums[i]!=nums[nums[i]-1])//&&nums[i]!=i+1 TLE 优化 nums[i]!=nums[nums[i]-1]
                swap(nums[i],nums[nums[i]-1]);
        }
        for(int i = 0;i<n;i++)
            if(nums[i]!=i+1)
                return i+1;
        return n+1;
    }
};

时间复杂度 O ( n ) O(n) O(n) , 一次遍历确定所有数的位置,时间复杂度 O ( n ) O(n) O(n) ,枚举每个位置是否存放相应的数,时间复杂度 O ( n ) O(n) O(n) 。总时间复杂度 O ( 2 × n ) O(2\times n) O(2×n) ,忽略常数时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( 1 ) O(1) O(1) ,只用到常量级额外空间。

致语

理解思路很重要!
欢迎读者在评论区留言,答主看到就会回复的。

AC

AC

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

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

相关文章

网易有道三季报解读:转型“有道”,但依旧道阻且长

11月17日晚间&#xff0c;美股上市公司网易有道&#xff08;以下简称“有道”&#xff09;发布2022年第三季度财报&#xff0c;营收同比大幅增长&#xff0c;亏损大幅收窄&#xff0c;成绩喜人。有道去年三季度自7月24日“双减”政策出台后被迫开始转型&#xff0c;整整一年过去…

MySQL-Day02 数据库以及数据表的基本操作

目录 一、数据库的基本操作 1.1 创建数据库 1.2 删除数据库 1.3 使用创建的数据库 1.4 扩展知识&#xff1a;InnoDB表 面试题&#xff1a;InnoDB和MyISAM的区别&#xff1f; 二、数据表的基本操作 2.1 创建数据表 MySQL数据类型 2.2 表约束 2.2.1 主键约束 2.2.2 非…

求求了!这份GitHub 70K+的纯手写RabbitMQ 笔记都给我码住好吗!

说到消息中间件&#xff0c;大部分人的第一印象可能是Kafka。毕竟Kafka自问世以来&#xff0c;就顶着高并发&#xff0c;大流量的光环。当然了Kafka也不负众望&#xff0c;在大数据处理方面一直独领风骚。 这里想说说另一款同样优秀的消息中间件RabbitMQ。 选RabbitMQ还是Kaf…

一种多源信息融合方法及其应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

基于armv8的kvm实现分析(三)kvm初始化流程

本文基于以下软硬件假定&#xff1a; 架构&#xff1a;AARCH64 内核版本&#xff1a;5.14.0-rc5 1 kvm概述 kvm是基于linux内核实现的一种type 2虚拟化方案&#xff0c;它作为内核的一个模块负责虚拟化环境初始化&#xff0c;虚拟机和虚拟cpu模拟&#xff0c;以及IO捕获与转…

发布适用于 .NET 7 的 .NET MAUI

我们在六个月前向您介绍了 .NET 多平台应用程序 UI (MAUI)&#xff0c;现在我们很高兴地宣布 .NET MAUI 在我们的下一个主要版本 .NET 7 中普遍可用。在此短的时间范围内&#xff0c;我们在 .NET MAUI 中的主要工作是解决您的主要反馈报告、改进 CollectionView 的性能&#xf…

P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛

题目&#xff1a; 思路&#xff1a; 首先排除比较每一个比X小的数去看结果&#xff0c;因为一定会tle 然后考虑去和每一个比X小的数去看结果&#xff0c;去判定是否比它小&#xff0c;看起来是优秀了一些&#xff0c;但是 n以内的质数比例大约是1ln(n)\frac{1}{ln(n)}ln(n)1​…

MCE | 线粒体和能量代谢的关系

线粒体是细胞生命活动的能量工厂&#xff0c;是几乎所有真核生物都存在的一种细胞器。它的主要功能是进行氧化磷酸化 (OXPHOS) 合成 ATP&#xff0c;是糖类、脂肪和氨基酸等物质的最终氧化释放能量的场所。自带“内核”和“核心技术”的线粒体&#xff1a;线粒体内有一套独立的…

JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 解析Ehcache的各种集群方案,本地缓存如何变身分布式缓存

大家好&#xff0c;又见面了。 上一篇文章中&#xff0c;我们知晓了如何在项目中通过不同的方式来集成Ehcache并在业务逻辑中进行使用。作为JAVA本地缓存框架综合实力天花板级别的Ehcache&#xff0c;除了在本地缓存方面具有强悍的实力外&#xff0c;还具有一个其它对手所不具…

Metabase学习教程:提问-6

搜索表格和问题 了解如何使用筛选器和自定义表达式在SQL查询和简单问题中进行搜索。在表格中查找单词或短语现在比以往任何时候都容易。 添加过滤器给你的问题可以让你的问题搜索文本轻而易举。您可以使用示例数据库包含在每个Metabase安装中。 在问题中搜索 我们将从单击浏…

linux笔记(8):东山哪吒D1H移植lvgl(HDMI输出)

文章目录1. 下载&#xff0c;修改&#xff0c;编译源码1.1下载源码1.1.1新建一个lvgl目录&#xff0c;在该目录下下载源码1.1.2 在lvgl目录下再建一个myspace/lvgl_demo目录&#xff0c;把参与编译的文件拷贝到本目录1.2 修改源码1.3编译源码2.拷贝到东山哪吒开发板运行3.已移植…

BUUCTF Web 极客大挑战 2019 EasySQL

BUUCTF Web 极客大挑战 2019 EasySQL 文章目录BUUCTF Web 极客大挑战 2019 EasySQL1&#xff0c;输入万能密码&#xff1a;2&#xff0c;输入万能账号首先有点常识&#xff1a;正常SQL语句这样子写&#xff1a;select * from user where username XXX and password XXX&#x…

MySQL函数

函数的理解 什么是函数 函数在计算机语言的使用中贯穿始终&#xff0c;函数的作用是什么呢&#xff1f;它可以把我们经常使用的代码封装起来&#xff0c;需要的时候直接调用即可。这样既 提高了代码效率 &#xff0c;又 提高了可维护性 。在 SQL 中我们也可以使用函数对检索出…

prompt(1) to win -xss学习

网址 https://prompt.ml/level 0 (闭合) function escape(input) {// warm up// script should be executed without user interactionreturn <input type"text" value" input ">; } 闭合前面的双引号 "><img src1 onerrorprompt(1)…

EasyPoi——导出导入表格数据工具

文章目录文档概念环境搭建&#xff08;maven&#xff09;工具类主要使用注解Excel 主要用的注解实战实体类&#xff08;部分&#xff09;导出Controller层导出结果导入service层controller层文档 官方文档 概念 Easypoi主打的功能就是容易&#xff0c;让一个没见接触过poi的…

java每日一练 (1)

java每日一练 &#xff08;1&#xff09; 单选部分 1.在 Java 中&#xff0c;存放字符串常量的对象属于&#xff08; &#xff09;类对象。   A Character B String C StringBuffer D Vector 答案 &#xff1a; B 复习文章 &#xff1a; String类 — 上篇_ 2.图示 &#xff…

C#在Pdf画统计图表之【雷达图】(以五边形为例)

前言 工具&#xff1a;PdfSharpCore或Pdfsharp 知识 &#xff1a;基本的三角函数 思路 &#xff1a; 画坐标&#xff0c;确定点-------->画多个半径渐变的正多边形------->根据数据确定雷达图的数值位置 StepOne:画一个正五边形 先画一个辅助坐标轴&#xff0c; 再通过…

40多行实现一个非常简单的shell

目录简单的shell的实现附代码简单的shell的实现 目的&#xff1a;主要就是为了加深对shell的底层原理的理解 可以通过接口可以获取到这些主机名等等这里直接就用字符串打印了 当我们打开一个c文件默认就打开了三个输入输出流&#xff1a;stdin(标准输入),stdout(标准输出),st…

一种具有肤质保留功能的磨皮算法

基本原理 1、复制原图Src作为HighPass层&#xff1a;HighPass Copy(Src)。 2、对HighPass层磨皮&#xff08;就是进行保边滤波&#xff0c;可以选择表面模糊、导向滤波、双边滤波、各向异性扩散、BEEP、局部均方差、Domain transfer、 Adaptive Manifolds、 Local Laplacian …

产品经理学习和认证PMP

PMP的功效 PMP是由美国项目管理协会&#xff08;PMI&#xff09;发起的项目管理认证考试&#xff0c;以项目管理知识体系&#xff08;PMBOK&#xff09;为考试基准。经过实际分析和总结&#xff0c;PMP具有如下几种功效&#xff1a; 首先&#xff0c;PMP是国际认可度最高的项目…