JAVA练习365- O(1) 时间插入、删除和获取随机元素

发布时间:2026/9/15 8:21:19

JAVA练习365- O(1) 时间插入、删除和获取随机元素 题目概览实现RandomizedSet类RandomizedSet()初始化RandomizedSet对象bool insert(int val)当元素val不存在时向集合中插入该项并返回true否则返回false。bool remove(int val)当元素val存在时从集合中移除该项并返回true否则返回false。int getRandom()随机返回现有集合中的一项测试用例保证调用此方法时集合中至少存在一个元素。每个元素应该有相同的概率被返回。你必须实现类的所有函数并满足每个函数的平均时间复杂度为O(1)。示例输入[RandomizedSet, insert, remove, insert, getRandom, remove, insert, getRandom] [[], [1], [2], [2], [], [1], [2], []]输出[null, true, false, true, 2, true, false, 2]解释RandomizedSet randomizedSet new RandomizedSet(); randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。 randomizedSet.remove(2); // 返回 false 表示集合中不存在 2 。 randomizedSet.insert(2); // 向集合中插入 2 。返回 true 。集合现在包含 [1,2] 。 randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。 randomizedSet.remove(1); // 从集合中移除 1 返回 true 。集合现在包含 [2] 。 randomizedSet.insert(2); // 2 已在集合中所以返回 false 。 randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字getRandom 总是返回 2 。提示-2^31 val 2^31 - 1最多调用insert、remove和getRandom函数2 *10^5次在调用getRandom方法时数据结构中至少存在一个元素。来源380. O(1) 时间插入、删除和获取随机元素 - 力扣LeetCode解题分析方法哈希插入和删除可以用通过集合来实现由于集合是乱序的因此我们需要一个有序集合来存储每个元素由于这里给出了最多调用 20000 次我们可以用长度为 20000 的数组代替那么维护一个变量 index记录当前数组索引集合用 map 实现key 为 valvalue 为 index插入时插入 mapnums[ index ] valindex删除时删除 map 对应 val 的键值对并记录对应索引 cur将数组对应索引值设置为数组最后一个即 nums[cur] nums[index]然后 index--。随机获取时生成 [ 0i的随机值即可时间复杂度O(1)空间复杂度O(n)class RandomizedSet { static int[] nums new int[200001]; Random random new Random(); MapInteger, Integer map new HashMap(); int i -1; public RandomizedSet() { } public boolean insert(int val) { if (map.containsKey(val)) { return false; } nums[i] val; map.put(val, i); return true; } public boolean remove(int val) { if (!map.containsKey(val)) { return false; } int index map.remove(val); if (index i) { i--; return true; } nums[index] nums[i--]; map.put(nums[index], index); return true; } public int getRandom() { int ran random.nextInt(i1); return nums[ran]; } } /** * Your RandomizedSet object will be instantiated and called as such: * RandomizedSet obj new RandomizedSet(); * boolean param_1 obj.insert(val); * boolean param_2 obj.remove(val); * int param_3 obj.getRandom(); */
延伸阅读

更多相关文章

2026/9/13 6:01:15

图数据结构与算法实战:从基础到工程优化

1. 图数据结构基础概念解析 图(Graph)作为数据结构中的"瑞士军刀",是描述实体间复杂关系的终极武器。不同于线性结构的串行排列和树形结构的层级约束,图以节点(Vertex)和边(Edge&…

2026/9/12 22:08:47

实验报告撰写规范与核心内容梳理指南

搞科研的大家!找英文文献依然是科研路上最头疼的一道坎儿吧? 尤其是现在AI工具层出不穷,老工具也在不断升级,选对平台能省下大把时间。今天我给大家盘点8个好用的英文文献检索网站,涵盖传统权威平台 新一代AI智能工具…

2026/9/14 7:49:13

蔬菜配送系统怎么选?同行都在推的靠谱报价,认准菜东家

做蔬菜配送这行,内行都懂:赚的是辛苦钱,亏的是管理漏洞。每天凌晨分拣、多客户调价、账期混乱、损耗算不清、错单漏单频发……很多老板不是生意不赚钱,而是人工管不住、账目对不上、效率提不上。现在同行圈子里有个共识&#xff1…

2026/9/15 8:16:42

已有项目引入AI Agent实战

回忆下 之前做agent demo时的代码流程。接收消息内容、补充上下文、转成词向量、遍历数据库数据、做余弦相似度匹配、把查询到的知识库数据汇总到消息中、调用LLM模型得出自然语言输出。重复循环处理几次。项目一:人力智能问答对比于上面的流程。有主要变化的几个点…

2026/9/15 8:16:42

智能体专用型轻量服务器:AI Agent 部署与Tokens成本全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:16:42

AI Agent入门指南:零基础搭建你的智能体助手

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:16:42

FOC系统中UART的实战定位与调试价值

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:16:42

一键即用!一个基于 Kubernetes 构建的云操作系统!

大家好,我是 Java陈序员。 在如今的云原生时代,不得不说,Kubernetes 的功能十分强大,但同时入门门槛也很高。 想学习部署应用一套完整的 Kubernetes 集群,需要耗费大量时间搞定环境、网络、存储等问题。即便轻量化的 K…

2026/9/15 8:11:41

Python自动化情侣纪念日文案生成工具开发实践

1. 项目背景与需求分析情人节、恋爱纪念日这些特殊日子,很多情侣都会面临"文案荒"和"配图选择困难症"。根据我过去五年运营情感类公众号的经验,每逢节日前后,"纪念日文案"相关搜索量会暴涨300%以上。这个现象背…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码