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)相关推荐

  1. LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(vector + 哈希)

    文章目录 1. 题目 2. 解题 1. 题目 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. ...

  2. 常数时间插入、删除和获取随机元素

    常数时间插入.删除和获取随机元素 设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构. insert(val): 当元素val不存在时,向集合中插入该项. remove(val): 元素v ...

  3. 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复

    力扣 O(1) 时间插入.删除和获取随机元素 - 允许重复 题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集 ...

  4. 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

    链接:381. O(1) 时间插入.删除和获取随机元素 - 允许重复 题解: class RandomizedCollection { private:std::unordered_map<in ...

  5. 算法刷题-O(1) 时间插入、删除和获取随机元素、汇总区间

    文章目录 O(1) 时间插入.删除和获取随机元素 汇总区间 改写字符串 O(1) 时间插入.删除和获取随机元素 设计一个支持在_平均 _时间复杂度 **O(1) 下, **执行以下操作的数据结构. 注 ...

  6. leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

    设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 val 存在时,从 ...

  7. 2022-1-28 Leetcode 380.O(1)时间插入、删除和获取随机元素

    删除和插入的时间为 O(1)O(1)O(1)是哈希之类的,而O(1)O(1)O(1)的随机获取可以用数组实现. 所以比较好的方式是,使用数组实现数据的存储,使用哈希表存放数组的下标,每次删除的时候将数 ...

  8. leetcode 380. Insert Delete GetRandom O(1) | 380. O(1) 时间插入、删除和获取随机元素(Java)

    题目 https://leetcode.com/problems/insert-delete-getrandom-o1/ 题解 一个设计题,没想出来,参考了: Java solution using ...

  9. LeetCode每日一题——380. O(1) 时间插入、删除和获取随机元素

    目录 题目要求 示例 思路 题解 题目要求 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当 ...

最新文章

  1. 独家 | 一文了解强化学习的商业应用2
  2. MySql 5.7 新特性概览
  3. python通过pyinstaller打包软件将GUI项目打包成exe文件
  4. OpenGL使用计算着色器进行GPU光线跟踪
  5. Python3之logging输出写入日志
  6. python中文视频教程-中谷python中文视频教程(全38集)
  7. python生成矢量图_Jupyter Notebook输出矢量图实例
  8. [原创]Kjava手机顽童模拟器
  9. linux压缩命令常用:tar,tgz,gzip,zip,rar
  10. Bitvise SSH Client
  11. winpe做服务器系统备份,如何进pe做系统备份-重装系统怎么备份?
  12. 大数据平台技术架构-图
  13. 远程重启h3c路由器_H3C路由器简单命令
  14. 爬虫学习分享Python下载mp4文件(源码)
  15. signature=d9ec3a6de0e8070c533bed83cd9d5728,MS12-037:Internet Explorer 累积安全更新:2012 年 6 月 12 日...
  16. WORD2010文档里面突然不能输入汉字的解决办法
  17. Phun-有趣的二维物理引擎
  18. usb 进入suspend_解决了USB中suspend和resume的一个问题 | 学步园
  19. 最简单的 DRM 应用 drm设备不工作
  20. Excel VBA-正则表达式汇总

热门文章

  1. python静态方法,类方法,属性方法,实例方法
  2. 原型设计+用户规格说明书
  3. Ogg入门--基本命令
  4. 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
  5. 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
  6. C#中用委托实现C++的回调函数
  7. sql 查看Oralce 数据库连接状态
  8. 静态链接库与动态链接库的区别
  9. 解析一个C语言俄罗斯方块游戏,包你看了就会
  10. win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器