LeetCode hot100-17
41. 缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
这题要求空间复杂度为O(1),要么定义单个变量,要么原地操作。定义长度为n的数据结构空间复杂度应该是O(n)。我写出来就是空间复杂度O(n)的算法,时间复杂度O(n)。但是能通过… 思路就是用HashSet的contains方法,从1往后看哪个不包含了。
注意,我最开始不是用的set,用的Arrays.asList(newNums).contains(i),这样会超时,换成set就不会超时了。去看了下这两个contains的时间复杂度。
Arrays.asList(...).contains(...): 这是一个链式调用,Arrays.asList 创建一个固定大小的列表,然后 contains 方法在这个列表上进行线性搜索,时间复杂度为 O(n)。
HashSet.contains 方法的时间复杂度是 O(1)。这意味着在集合中查找元素的时间不会随着集合的大小而增加。在 HashSet 内部,元素是通过计算其哈希码然后存储在基于这个哈希码的位置上的。因此,查找元素时只需要计算该元素的哈希码并查找对应的存储位置即可。如果该位置上有元素且通过 equals 方法比较也匹配,则找到了元素;否则,没有找到元素。
这个特性使得 HashSet.contains 方法能够非常快速地确定元素是否存在于集合中,无论集合中有多少元素。
我的代码
Arrays.stream(nums).boxed().toArray(Integer[]::new);这一句是为了把int类型转为Integer类型,因为Arrays.asList只能用包装类
这个方法接受一个泛型参数 T,表示数组或者参数的类型。T 必须是一个引用类型,不能是一个基本类型,例如 int, double, char 等。如果传入一个基本类型的数组,Arrays.asList() 会把它当作一个 Object 类型的元素,而不是把它的每个元素当作 Object 类型。这样就会导致返回的 List 只有一个元素,就是原始数组本身。
class Solution {public int firstMissingPositive(int[] nums) {Integer[] newNums = Arrays.stream(nums).boxed().toArray(Integer[]::new);Integer i = 1;Set<Integer> set = new HashSet<>(Arrays.asList(newNums));while (set.contains(i)) {i++;}return i;}
}
官方解法
interesting!有一种手动hash的感觉。
1.把<=0的数改为n+1,这一步就是为了出去非正数,因为他们不影响结果。只需要在正数里面找没出现过的。用这个n+1是因为n个数,里面没出现过的正整数最大只能到n+1,用n+1赋值不影响结果。这里用一个正无穷也是一样的效果。
2.遍历数组中的每一个数x, 将x的绝对值-1作为下标,将这个下标对应的数变成负数(已经是负数就不变)。这一步就是就类似于一个大小为n的数组M,数组M中最大的数为y。那就定义一个大小为y的数组N,然后把M数组中的值-1作为下标散列到数组N中去。然后从前往后遍历,没有被散列到的位置+1就是没出现过的最小的数。
3.按照第2步描述的思想遍历找结果
class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;for (int i = 0; i < n; ++i) {if (nums[i] <= 0) {nums[i] = n + 1;}}for (int i = 0; i < n; ++i) {int num = Math.abs(nums[i]);if (num <= n) {nums[num - 1] = -Math.abs(nums[num - 1]);}}for (int i = 0; i < n; ++i) {if (nums[i] > 0) {return i + 1;}}return n + 1;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/first-missing-positive/solutions/304743/que-shi-de-di-yi-ge-zheng-shu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:
LeetCode hot100-17
41. 缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 这题要求空间复杂度为O(1),要么定义单个变量,要么原地操作。定义长度为n的数…...
java网络原理(二)------TCP确认应答和超时重传
一Tcp协议 TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节,范围是0到65535.如…...
机器学习:智能时代的核心引擎
目录 一、什么是机器学习 二、监督学习 三、无监督学习 四、半监督学习 五、强化学习 一、什么是机器学习 机器学习是人工智能的一个分支,它主要基于计算机科学,旨在使计算机系统能够自动地从经验和数据中进行学习并改进,而无需进行明确…...
Docker-Image
Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…...
YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet
文章目录 前言模块添加方法双特征提取例子`GhostNet+ShuffleNet` 双主干结构图代码`Swin+ShuffleNet` 双主干结构图代码参数量与计算量1. 什么是YOLO-Magic框架?2. 如何加入这个框架?3. 加入后如何使用框架?4. GitHub组织是什么?...
工作需求ElementUi组件的使用
加油,新时代打工人! 组件源码 <template><div mouseenter"mousein true" mouseleave"mousein false"><el-input type"text" clearable autocomplete"off" v-model"searchDoc.originName…...
自动驾驶轨迹规划之时空语义走廊(一)
欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊...
[环境配置].ssh文件夹权限修改方法
问题描述: 通过VSCode中的Remote Explorer或者通过CMD等命令行窗口连接远程机器时,会因为提示 "Bad owner or permissions on C:\\Users\\xxx/.ssh/config"而导致失败,最终呈现在VSCode中的效果是,弹窗提示"Could…...
LeetCode刷题【树状数组、并查集、二叉树】
目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…...
使用POI以OLE对象的形式向excel中插入附件(pdf为例)
前言: 最近在使用easyExcel操作excel文件时,一直想找到一个方法可以往excel中填充附件,但是目前只发现POI可以插入附件,于是将方法记录如下: 实现: 这个方法主要是使用 Apache POI 的 HSSFWorkbook 类来…...
Unity构建详解(2)——SBP的初始设置和脚本编译
【SwitchToBuildPlatform】 核心逻辑如下 EditorUserBuildSettings.SwitchActiveBuildTarget(m_Parameters.Group, m_Parameters.Target); 直接调用切换平台的接口,一般来说,这个步骤不会执行,我们打包时肯定会事先将平台切换好的 【Rebu…...
Matlab使用教程(持续更新)
1. Matlab Matlab被广泛的应用在数据分析,汽车仿真,机器人以及医学研究等众多方面。 它可以帮助我们理解研究复杂的系统。 在60年代和70年代,计算机使得科学家和工程师完成了以前不可能进行的计算;但是需要懂得计算机编程。 C…...
管理能力学习笔记一:角色转身
管理能力学习是为了解决角色转身后面临的更多更复杂的的问题。初晋管理层,需要转变工作习惯,学会分配时间。 角色转身 建立“授权”意识 通过匹配工作内容与下属员工能力,分配工作,避免陷入下属能力不足 -> 不愿授权 -> 下…...
Redis面试题 概要
文章目录 Redis面试题 概要缓存穿透布隆过滤器缓存击穿缓存雪崩数据同步数据持久化数据过期策略Redis的数据淘汰策略Redis + Lau 限流Redis面试题 概要 Redis是一个基于 C 语言开发的开源 NoSQL 数据库,Redis 的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度…...
原型,模板,策略,适配器模式
原型模式 原型模式(创建型模式),核心思想就是:基于一个已有的对象复制一个对象出来,通过复制来减少对象的直接创建的成本。 总结一下,原型模式的两种方法,浅拷贝只会复制对象里面的基本数据类型…...
Ollama 在本地快速启动并执行LLM【大语言模型】
文章目录 1. 什么是Ollama?1.1. SDK库1.2. 提供的api服务1.3. [支持的LLM](https://ollama.com/library)2. 如何安装2.1.下载docker镜像2.2. 启动docker容器3. 如何使用?3.1. 如何加载模型3.2. 使用 Ollama CLI 进行推理3.3. 使用 Ollama API 进行推理参考1. 什么是Ollama?...
ubuntu : 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
往后看,90%能解决你的问题 原文链接:学一下 (suxueit.com) 我相信很多人刚使用ubuntu都遇到过这个问题,如果没有遇到,可能是你运气好使用了正确的软件源 libprotobuf-dev : 依赖: zlib1g-dev 但是它将不会被安装 zlib1g-dev : 依…...
瑞芯微RK3576|触觉智能:开启科技新篇章
更多产品详情可关注深圳触觉智能官网! “瑞芯微,创新不止步!”——全新芯片RK3576即将震撼登场。指引科技风潮,创造未来无限可能!这款芯片在瑞芯微不断创新和突破的道路上,不仅是对过往成就的完美延续&…...
Visual Studio 2013 - 清理
Visual Studio 2013 - 清理 1. 清理1.1. 工程清理1.2. 解决方案清理 References 1. 清理 Debug Release 1.1. 工程清理 (right mouse click on the project) -> 清理 1.2. 解决方案清理 (right mouse click on the solution) -> 清理解决方案 References [1] Yongq…...
1、初识JVM
一、JVM是什么? JVM的英文全称是 Java Virtual Machine,其中文译名为Java虚拟机。它在本质上就是是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 JVM执行流程如下 二、JVM有哪些功能? 2.1 解释和运行 对字节码文…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
TI德州仪器TPS3103K33DBVR低功耗电压监控器IC电源管理芯片详细解析
1. 基本介绍 TPS3103K33DBVR 是 德州仪器(Texas Instruments, TI) 推出的一款 低功耗电压监控器(Supervisor IC),属于 电源管理芯片(PMIC) 类别,主要用于 系统复位和电压监测。 2. …...
十、【ESP32开发全栈指南: TCP客户端】
一、TCP协议核心特性回顾 TCP与UDP关键差异 特性TCPUDP连接方式面向连接 (三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付数据顺序保证数据按序到达不保证顺序流控制滑动窗口机制无流控制传输效率协议开销大头部开销小适用场景文件传输、网页浏览实时音视频、广播通…...
