LeetCode 380 O (1) 时间插入、删除和获取随机元素

发布时间:2026/8/25 4:02:49

LeetCode 380 O (1) 时间插入、删除和获取随机元素
一、题目核心要求需要实现三个操作全部平均时间复杂度 O (1)insert(val)插入元素存在返回 false不存在插入返回 trueremove(val)删除元素不存在返回 false存在删除返回 truegetRandom()随机等概率返回集合中一个元素单独容器的缺陷ArrayList动态数组尾部插入、随机访问 O (1)完美满足getRandom根据值查找、中间删除 O (n)无法满足 O (1) 删除HashMap/HashSet插入、删除、查找 O (1)不支持随机下标访问无法快速随机取元素核心解题思路双容器配合ArrayList nums存放所有数值依靠下标实现随机取值HashMap indkey 数值value 该数值在数组中的下标实现 O (1) 查找下标 两者互补全部操作做到平均 O (1)。二、代码逐段逻辑解析成员变量javaListInteger nums; // 存储所有元素用于随机访问 MapInteger,Integer ind; // 值 - 数组下标映射 Random random; // 生成随机下标构造方法初始化数组、哈希表、随机数工具。1. insert 插入逻辑javapublic boolean insert(int val) { if(ind.containsKey(val)){ return false; // 已存在插入失败 } int indexnums.size(); // 新元素放在数组末尾 nums.add(val); ind.put(val,index); // 记录值对应的下标 return true; }流程HashMap 判断元素是否存在去重新元素直接追加到数组尾部数组尾插 O (1)哈希表记录该值的下标。2. remove 删除数组中间删除会导致后续元素前移时间 O (n)优化技巧把待删除元素和数组最后一个元素交换再删除数组末尾数组尾删 O (1)。javapublic boolean remove(int val) { if(!ind.containsKey(val)){ return false; } // 1. 获取待删除元素下标 int indexind.get(val); // 2. 获取数组最后一个元素 int lastnums.get(nums.size()-1); // 3. 覆盖待删除位置 nums.set(index,last); // 4. 更新最后一个元素的下标映射 ind.put(last, index); // 5. 删除数组末尾、删除哈希表中val记录 nums.remove(nums.size()-1); ind.remove(val); return true; }关键步骤拆解拿到要删元素的下标index取出数组末尾元素last数组 index 位置覆盖为 last修改哈希表last 对应的下标改为 index数组删掉最后一位O (1)哈希表删掉 val3. getRandom 随机取值javapublic int getRandom() { int ranrandom.nextInt(nums.size()); return nums.get(ran); }random.nextInt(n)生成[0, n-1]均匀随机下标数组按下标访问 O (1)每个元素等概率。三、完整执行示例初始nums [2,5,7]ind{2:0,5:1,7:2}执行remove(5)index 1last 7nums.set(1,7) → nums [2,7,7]ind.put (7, 1) → 7 的下标更新为 1删除数组末尾nums [2,7]ind 删除 key5最终ind{2:0,7:1}四、易错细节删除时必须先更新末尾元素的下标映射再删数据如果先ind.remove(val)再更新 last 的下标逻辑直接出错。数组删除只能删末尾不能删中间元素nums.remove(index)是按下标删除中间元素会移位 O (n)绝对不能用。插入时新元素下标是nums.size()add 之前数组长度就是新元素的下标add 后长度 1。元素唯一HashMap 天然去重插入前必须判断containsKey。getRandom 依赖数组长度数组为空时题目保证不会调用。五、时间复杂度总结insertHashMap 存入 数组尾插 → O (1)removeHashMap 查找 / 修改 / 删除 数组尾删 → O (1)getRandom随机下标 数组下标访问 → O (1) 空间复杂度O (n)两个容器都存储全部元素。六、代码优缺点优点完全满足题目 O (1) 要求逻辑简洁删除交换尾部元素的优化是本题核心考点。可优化小细节变量命名可读性差ind→valToIndexRandom 实例全局复用无需重复创建当前写法没问题泛型可规范书写无语法错误。七、核心考点总结为什么不能只用 ArrayList / 只用 HashSet ArrayList 删除慢HashSet 不支持随机下标访问两者结合互补。删除操作为什么要和最后一个元素交换 数组尾部删除是 O (1)中间删除需要移动元素 O (n)交换规避移位。HashMap 在本题的作用 快速根据数值找到对应数组下标保证删除操作 O (1)。

相关新闻

dirmap高级Web目录扫描工具:从原理到实战的完整指南

dirmap高级Web目录扫描工具:从原理到实战的完整指南

2026/8/23 18:49:11

1. 项目概述如果你在安全测试或者渗透测试的圈子里待过一阵子,肯定对“目录扫描”这个词不陌生。简单来说,它就是拿着一个包含各种常见目录和文件名的“字典”,去一个个尝试访问目标网站,看看哪些路径是真实存在的。这活儿听起来简…

腾讯混元3.0免费上线:中文大模型工程落地新范式

腾讯混元3.0免费上线:中文大模型工程落地新范式

2026/8/23 18:49:11

1. 项目概述:一场不声不响却震得整个AI圈桌面发颤的发布“腾讯混元3.0大模型免费上线且性能猛增40%”——这行字刚在技术社区刷屏时,我正调试一个本地部署的Qwen2-7B推理服务,顺手点开混元官网控制台,输入邮箱、勾选协议、点击“立…

适配器模式(Adapter Pattern)属于**结构型设计模式**,其核心目的是**解决接口不兼容问题**

适配器模式(Adapter Pattern)属于**结构型设计模式**,其核心目的是**解决接口不兼容问题**

2026/8/24 20:54:14

适配器模式(Adapter Pattern)属于结构型设计模式,其核心目的是解决接口不兼容问题,通过创建一个适配器类(或对象)来“转换”一个类的接口,使其符合客户端所期望的另一个接口,从而让原…

DeepSeek多模态API实战:从识图搜索到生产部署全解析

DeepSeek多模态API实战:从识图搜索到生产部署全解析

2026/8/25 3:54:45

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来,以及它到底解决了什么具体问题。最近关于 DeepSeek 的讨论很多,尤其是“识图模式”和“搜索功能”这两个点,很多人关心的是:它是不是真的能看图说…

20分钟搭建AI辅助LaTeX写作环境,让学术写作更高效

20分钟搭建AI辅助LaTeX写作环境,让学术写作更高效

2026/8/25 3:54:45

最近在帮几位博士生朋友看论文初稿,发现一个挺有意思的现象:很多人花在调整格式、处理参考文献、纠结图表排版上的时间,可能比真正思考核心逻辑和实验设计的时间还要多。更常见的是,在写作后期,为了满足期刊那几十页、…

AI测试工程师面试核心考点与实战指南

AI测试工程师面试核心考点与实战指南

2026/8/25 3:54:45

1. AI测试工程师面试全景解析2023年全球AI测试岗位需求同比增长217%(数据来源:LinkedIn年度报告),这个数字背后是行业对AI质量保障人才的迫切需求。作为经历过数十场AI测试技术面试的从业者,我整理出这份覆盖90%高频考…

DeepSeek识图与联网搜索功能技术解析:原理、区别与集成实践

DeepSeek识图与联网搜索功能技术解析:原理、区别与集成实践

2026/8/25 3:54:45

最近,很多开发者朋友在讨论一个话题:DeepSeek的“识图模式”是不是能联网搜索了?网上流传着各种截图和讨论,有人说它现在不仅能看懂图片,还能直接联网获取最新信息,这听起来简直像是给AI模型装上了“眼睛”…

从DeepSeek V4看AI算力自主:模型狂欢背后的“中国心”破局之路

从DeepSeek V4看AI算力自主:模型狂欢背后的“中国心”破局之路

2026/8/25 3:54:45

1. 从“刷屏”到“内核”:一次技术狂欢背后的冷静观察最近几天,我的朋友圈和几个技术社群几乎被同一个名字刷爆了——DeepSeek V4。铺天盖地的评测、对比、惊叹,仿佛一夜之间,我们又在某个赛道上实现了“遥遥领先”。作为一名在AI…

基于腾讯云Lighthouse部署Hermes Agent微信AI助手完整指南

基于腾讯云Lighthouse部署Hermes Agent微信AI助手完整指南

2026/8/25 3:44:44

1. 项目概述:当智能体遇见即时通讯 最近在折腾AI智能体(Agent)的朋友,估计都绕不开一个名字:Hermes Agent。这玩意儿本质上是一个开源的、功能强大的AI智能体框架,你可以把它理解为一个“大脑”&#xff0…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…