当前位置:网站首页>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));
}
边栏推荐
- The last exam before the NPDP revision!caution
- Line segment tree of knowledge
- 最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享
- VS2019编译boost_1_79,生成32位和64位静态库
- 使网络安全威胁风险更高和成本更高的五个趋势
- 2022 Eye Health Brand Franchise Exhibition, Beijing Vision Care Exhibition, China Ophthalmology Technology Summit
- 【HNUMSC】C language second lecture
- 最强分布式锁工具:Redisson
- online schema change and create index
- MT4 / MQ4L entry to the master of EA tutorial lesson two (2) - - MQL language commonly used function account information commonly used functions
猜你喜欢
Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules
【Redis】主从复制的核心原理
【网络教程】IPtables官方教程--学习笔记3
最近看到很多人想自学或者报班但是不清楚如何选择,我今天就和大家说说
Redis - 时间序列数据类型的保存方案和消息队列实现
历史最全DL相关书籍、课程、视频、论文、数据集、会议、框架和工具整理分享
最强分布式锁工具:Redisson
gpio子系统和pinctrl子系统(中)
OJ:L3-021 神坛 伪解 排序后遍历
【云计算】XaaS最全介绍(按24字母合集):AaaS、BaaS、CaaS、DaaS、EaaS、FaaS、GaaS、HaaS、IDaaS…
随机推荐
继承 Inheritance
2022 China Eye Expo, China Beijing International Children and Adolescent Eye Health Industry Exhibition
<爆>2022中文版-《海外博士申请指南-材料准备、时间线、套磁、面试及录取》免费分享
JS 实现千分位分隔符
Processing Point Clouds
金融行业软件测试面试题(含答案)| 入门指南
时间复杂度和空间复杂度
带你做接口测试从零到第一条用例 总结
[ANT]apache ant 安装说明
腾讯地图获取定位
如何保护智能家居避免黑客攻击
多态 polymorphism
【无标题】
[TensorRT] 对UNet进行推理加速
uart_spi练习
gpio子系统和pinctrl子系统(下)
18.flink Table/Sql API之 catlog
基于JMF视频聊天
2022年自然语言处理校招社招实习必备知识点盘点分享
“蔚来杯“2022牛客暑期多校训练营7,签到题CFGJ