JAVA练习365- O(1) 时间插入、删除和获取随机元素
📅 2026/7/28 16:05:52
👁️ 次浏览
题目概览实现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(); */
1. 图数据结构基础概念解析 图(Graph)作为数据结构中的"瑞士军刀",是描述实体间复杂关系的终极武器。不同于线性结构的串行排列和树形结构的层级约束,图以节点(Vertex)和边(Edge&…
📅 2026/7/28 16:05:52
搞科研的大家!找英文文献依然是科研路上最头疼的一道坎儿吧? 尤其是现在AI工具层出不穷,老工具也在不断升级,选对平台能省下大把时间。今天我给大家盘点8个好用的英文文献检索网站,涵盖传统权威平台 新一代AI智能工具…
📅 2026/7/28 16:05:52
做蔬菜配送这行,内行都懂:赚的是辛苦钱,亏的是管理漏洞。每天凌晨分拣、多客户调价、账期混乱、损耗算不清、错单漏单频发……很多老板不是生意不赚钱,而是人工管不住、账目对不上、效率提不上。现在同行圈子里有个共识࿱…
📅 2026/7/28 16:05:52
1. 豆包AI商业实战手册的核心价值解析豆包AI作为国内领先的智能创作平台,正在重塑个人副业的变现模式。这本实战手册最吸引人的地方在于它提供了33个经过验证的商业闭环案例,每个案例都包含从需求挖掘到最终变现的完整链路设计。不同于市面上常见的AI工具…
📅 2026/7/29 6:47:30
1. 项目概述:为什么JDK安装是Java开发的“第一课”如果你正准备踏入Java开发的大门,或者需要在新的电脑上搭建开发环境,那么“JDK的安装及环境配置”就是你绕不开的、必须亲手完成的第一步。这听起来像是一个简单的软件安装,但很多…
📅 2026/7/29 6:47:30
1. 项目概述:为什么自定义控件是Qt开发者的必修课在任何一个稍具规模的Qt项目中,你几乎都会遇到一个绕不开的需求:界面上的标准控件不够用了。比如,你需要一个带实时搜索下拉框的ComboBox,一个能显示实时进度的按钮&am…
📅 2026/7/29 6:47:30
1. 项目概述:当数据可视化遇上桌面应用如果你用Python的Matplotlib做过数据分析,大概率会习惯在Jupyter Notebook里敲个plt.show(),弹出一个独立的图形窗口,然后截图、保存、再贴到报告里。这个流程在探索阶段没问题,但…
📅 2026/7/29 6:47:30
1. 项目概述:当学术研究遇上AI革命 去年帮导师整理肿瘤免疫治疗领域的文献时,我对着PubMed上3872篇相关论文差点崩溃。直到在实验室师兄的电脑上看到那个闪着蓝光的界面——输入关键词后,系统在23分钟内自动生成了带参考文献树状图的综述框架…
📅 2026/7/29 6:47:30
美团 LongCat 2.0 开源,CatPaw 平台上线本月,美团 LongCat 2.0 已正式开源,总参数 1.6T,平均激活约 48B,动态范围 33B 到 56B,原生支持 1M 超长上下文。这是首个在五万张国产算力卡上完成全流程训练与推理的…
📅 2026/7/29 6:46:30
解密Seq的核心功能:如何利用Pipeline实现高效基因组数据处理 【免费下载链接】seq A high-performance, Pythonic language for bioinformatics 项目地址: https://gitcode.com/gh_mirrors/se/seq
Seq作为一款高性能的生物信息学专用语言,其Pipel…
📅 2026/7/29 0:00:00
Flask-Blogging插件开发指南:打造属于你的个性化博客功能 【免费下载链接】Flask-Blogging A Markdown Based Python Blog Engine as a Flask Extension. 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-Blogging
Flask-Blogging是一个基于Markdown的Py…
📅 2026/7/29 0:00:00
近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…
📅 2026/7/29 0:01:00
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/29 1:14:44
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/29 1:14:44
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/29 1:14:46
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/28 7:13:45
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/28 17:14:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/29 5:15:05