LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)
1. 题目
设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。
insert(val):当元素 val 不存在时,向集合中插入该项。
remove(val):元素 val 存在时,从集合中移除该项。
getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-delete-getrandom-o1
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 哈希表 key存储数据,value存储其在vector中的下标
- 删除时,先把vector尾部的数存到要删除的位置
class RandomizedSet {vector<int> v;unordered_map<int,int> m;
public:RandomizedSet() { }bool insert(int val) {if(m.find(val) == m.end()){m[val] = v.size();v.push_back(val);return true;}elsereturn false;}bool remove(int val) {if(m.find(val) == m.end())return false;v[m[val]] = v.back();m[v.back()] = m[val];v.pop_back();m.erase(val);return true;}int getRandom() {if(v.size() == 0)return -1;return v[rand() % v.size()];}
};
LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)相关推荐
- LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(vector + 哈希)
文章目录 1. 题目 2. 解题 1. 题目 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. ...
- 常数时间插入、删除和获取随机元素
常数时间插入.删除和获取随机元素 设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构. insert(val): 当元素val不存在时,向集合中插入该项. remove(val): 元素v ...
- 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复
力扣 O(1) 时间插入.删除和获取随机元素 - 允许重复 题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集 ...
- 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
链接:381. O(1) 时间插入.删除和获取随机元素 - 允许重复 题解: class RandomizedCollection { private:std::unordered_map<in ...
- 算法刷题-O(1) 时间插入、删除和获取随机元素、汇总区间
文章目录 O(1) 时间插入.删除和获取随机元素 汇总区间 改写字符串 O(1) 时间插入.删除和获取随机元素 设计一个支持在_平均 _时间复杂度 **O(1) 下, **执行以下操作的数据结构. 注 ...
- leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 val 存在时,从 ...
- 2022-1-28 Leetcode 380.O(1)时间插入、删除和获取随机元素
删除和插入的时间为 O(1)O(1)O(1)是哈希之类的,而O(1)O(1)O(1)的随机获取可以用数组实现. 所以比较好的方式是,使用数组实现数据的存储,使用哈希表存放数组的下标,每次删除的时候将数 ...
- leetcode 380. Insert Delete GetRandom O(1) | 380. O(1) 时间插入、删除和获取随机元素(Java)
题目 https://leetcode.com/problems/insert-delete-getrandom-o1/ 题解 一个设计题,没想出来,参考了: Java solution using ...
- LeetCode每日一题——380. O(1) 时间插入、删除和获取随机元素
目录 题目要求 示例 思路 题解 题目要求 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当 ...
最新文章
- 独家 | 一文了解强化学习的商业应用2
- MySql 5.7 新特性概览
- python通过pyinstaller打包软件将GUI项目打包成exe文件
- OpenGL使用计算着色器进行GPU光线跟踪
- Python3之logging输出写入日志
- python中文视频教程-中谷python中文视频教程(全38集)
- python生成矢量图_Jupyter Notebook输出矢量图实例
- [原创]Kjava手机顽童模拟器
- linux压缩命令常用:tar,tgz,gzip,zip,rar
- Bitvise SSH Client
- winpe做服务器系统备份,如何进pe做系统备份-重装系统怎么备份?
- 大数据平台技术架构-图
- 远程重启h3c路由器_H3C路由器简单命令
- 爬虫学习分享Python下载mp4文件(源码)
- signature=d9ec3a6de0e8070c533bed83cd9d5728,MS12-037:Internet Explorer 累积安全更新:2012 年 6 月 12 日...
- WORD2010文档里面突然不能输入汉字的解决办法
- Phun-有趣的二维物理引擎
- usb 进入suspend_解决了USB中suspend和resume的一个问题 | 学步园
- 最简单的 DRM 应用 drm设备不工作
- Excel VBA-正则表达式汇总
热门文章
- python静态方法,类方法,属性方法,实例方法
- 原型设计+用户规格说明书
- Ogg入门--基本命令
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
- 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
- C#中用委托实现C++的回调函数
- sql 查看Oralce 数据库连接状态
- 静态链接库与动态链接库的区别
- 解析一个C语言俄罗斯方块游戏,包你看了就会
- win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器