当前位置:网站首页>20220530设计问题:常数时间插入、删除和获取随机元素
20220530设计问题:常数时间插入、删除和获取随机元素
2022-08-09 02:37:00 【丿SeeYouAgain】
题目描述:实现RandomizedSet
类:
RandomizedSet() 初始化 RandomizedSet 对象
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。
编码实现:
private HashMap<Integer, Integer> keyValueMap;
private HashMap<Integer, Integer> valueKeyMap;
private Random random;
private int idx;
public RandomizedSet() {
keyValueMap = new HashMap<>();
valueKeyMap = new HashMap<>();
random = new Random();
idx = 0;
}
public boolean insert(int val) {
if (valueKeyMap.containsKey(val)) {
return false;
}
keyValueMap.put(idx, val);
valueKeyMap.put(val, idx);
idx++;
return true;
}
public boolean remove(int val) {
if (!valueKeyMap.containsKey(val)) {
return false;
}
idx--;
Integer remove = valueKeyMap.remove(val);
if (remove != idx) {
Integer lastVal = keyValueMap.get(idx);
keyValueMap.put(remove, lastVal);
valueKeyMap.put(lastVal, remove);
}
keyValueMap.remove(idx);
return true;
}
public int getRandom() {
return keyValueMap.get(random.nextInt(idx));
}
边栏推荐
猜你喜欢
不会吧!不会吧!居然还有人不知道重绘以及回流
【Jenkins 学习笔记】玩转持续集成与持续交付
OJ:L3-021 神坛 伪解 排序后遍历
Postman接口测试【官网】最新版本 安装及使用入门教程
Likou Brush Question Record 1.5-----367. Valid perfect squares
gpio子系统和pinctrl子系统(下)
Likou Brush Question Record 4.1-----209. The sub-array with the smallest length
数字 06 verilog_关于异步FIFO
最强分布式锁工具:Redisson
ApiFile配置环境
随机推荐
【izpack】使用izpack为你的程序提供安装程序封装
为什么应用程序依赖关系映射对于云迁移至关重要
Yii2开启 Schema 缓存
连接数据库且在网页运行的RDLC
18.flink Table/Sql API之 catlog
[LeetCode305周赛] 6136. 算术三元组的数目,6139. 受限条件下可到达节点的数目,6137. 检查数组是否存在有效划分,6138. 最长理想子序列
1160. 拼写单词
The last exam before the NPDP revision!caution
基于NLP的智能问答系统核心技术
Line segment tree of knowledge
工具类:base64格式的数据与本地文件的相互转换
Likou Brush Question Record 6.1-----203. Remove linked list elements
SQLite切换日志模式优化
Inheritance
Open3D 均匀采样
原文翻译:Structure Aware Single-stage 3D Object Detection from Point Cloud
普通人如何增加收入
最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享
online schema change and create index
LintCode 146. 大小写转换 II