LeetCode 380 O (1) 时间插入、删除和获取随机元素
📅 2026/7/4 4:21:34
👁️ 次浏览
一、题目核心要求需要实现三个操作全部平均时间复杂度 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)。
1. 项目概述如果你在安全测试或者渗透测试的圈子里待过一阵子,肯定对“目录扫描”这个词不陌生。简单来说,它就是拿着一个包含各种常见目录和文件名的“字典”,去一个个尝试访问目标网站,看看哪些路径是真实存在的。这活儿听起来简…
📅 2026/7/4 4:21:34
本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 目 录
摘…
📅 2026/7/4 4:21:34
本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 目 录
摘…
📅 2026/7/4 4:21:34
1. 项目概述:这不是又一个“AI发布会”,而是一次创作者工具链的实质性降维DMXAPI 平台最近放出的消息里,“打破视觉模型高价门槛”和“全能gpt-5.5同步上线”这两句话,我反复看了三遍。不是因为 hype,而是因为它踩中了…
📅 2026/7/4 5:27:43
技术重构让幻兽帕鲁服务器运维效率提升3倍:palworld-server-tool的架构革命 【免费下载链接】palworld-server-tool [中文|English|日本語]基于.sav存档解析和REST&RCON优雅地用可视化界面管理幻兽帕鲁专用服务器。/ Through parse .sav and REST&RCON, vis…
📅 2026/7/4 5:27:43
炉石传说插件HsMod:55项功能彻底改变你的游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod
你是否厌倦了炉石传说中漫长的开包动画?是否希望跳过那些重复的日…
📅 2026/7/4 5:27:43
StudioPlugins中文汉化:官方中文语言包插件安装与配置 【免费下载链接】StudioPlugins Android Studio 精品插件合集,不在于多只在于精 项目地址: https://gitcode.com/gh_mirrors/st/StudioPlugins
StudioPlugins是Android Studio精品插件合集&a…
📅 2026/7/4 5:27:43
BigFunctions AI函数完全教程:在BigQuery中使用Gemini模型进行智能分析 【免费下载链接】bigfunctions Supercharge BigQuery with BigFunctions 项目地址: https://gitcode.com/gh_mirrors/bi/bigfunctions
BigFunctions是一款能够为BigQuery提供强大扩展功…
📅 2026/7/4 5:27:43
Instatic内容爬虫:自动抓取与定期更新配置全攻略 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic
Instatic作为一款现代化自托管视觉CMS&…
📅 2026/7/4 5:25:43
Axure RP中文界面终极解决方案:3分钟告别英文困扰 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn
还在为Axure RP的英…
📅 2026/7/4 0:00:50
1. MC6470与STM32F745VG的黄金组合解析在工业自动化和机器人控制领域,传感器与微控制器的协同工作能力直接决定了系统的响应速度和定位精度。MC6470作为一款6自由度惯性测量单元(6DOF IMU),与STM32F745VG这款基于ARM Cortex-M7内核的高性能微控制器组合&…
📅 2026/7/4 0:00:50
1. 项目概述:为什么要在本地跑 SAM Audio?这不只是“能用”,而是“必须用”SAM Audio——全称是 Segment Anything Model for Audio,不是 Meta 那个视觉领域的 SAM(Segment Anything Model)的简单移植&…
📅 2026/7/4 0:00:50
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/7/2 17:37:53
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/7/2 17:37:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/4 5:07:51
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/4 5:10:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/3 10:20:06