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

题解:

class RandomizedCollection {
private:std::unordered_map<int, std::unordered_set<int>> tabel_;std::vector<int> nums_;public:/** Initialize your data structure here. */RandomizedCollection() {tabel_.clear();nums_.clear();}/** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */bool insert(int val) {bool ret = tabel_.find(val) == tabel_.end();nums_.push_back(val);tabel_[val].insert(nums_.size()-1);return ret;}/** Removes a value from the collection. Returns true if the collection contained the specified element. */bool remove(int val) {// 判断val是否存储if(tabel_.find(val) == tabel_.end()) {return false;}// 找到val存在的下标int index = *(tabel_[val].begin());// 将数组中最后元素替换index位置nums_[index] = nums_.back();// 将index从table中删除tabel_[val].erase(index);// 将nums_.back()元素的下标也删除tabel_[nums_.back()].erase(nums_.size()-1);// 更新nums_.back()的下标if(index < nums_.size()-1) {tabel_[nums_.back()].insert(index);}// 如果index的table全部删除了,删除将val从tableif(tabel_[val].size() == 0) {tabel_.erase(val);}nums_.pop_back();return true;}/** Get a random element from the collection. */int getRandom() {return nums_[random()%nums_.size()];}
};/***  * Your RandomizedCollection object will be instantiated and called as such:*   * RandomizedCollection* obj = new RandomizedCollection();*    * bool param_1 = obj->insert(val);*     * bool param_2 = obj->remove(val);*      * int param_3 = obj->getRandom();*       */

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

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

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

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

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

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

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

  4. Leetcode每日一题:381.insert-delete-getrandom-o1-duplicates-allowed(时间插入、删除和获取随机元素-允许重复)

    思路:这个题标签标的困难,但实际上没什么难度:随机和插入就用一个vector即可,随机生成len以内的数字temp,然后取出v[temp]就能达到要求:关键是remove这个操作,开始我用的常规遍历删 ...

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

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

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

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

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

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

  8. LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)

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

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

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

最新文章

  1. python读取、写入、移动、复制文件(夹)以及其他关于文件(夹)的操作
  2. jittor和pytorch生成网络对比之esrgan
  3. SQL SERVER 导入EXCEL的存储过程
  4. python3 tensorflowprint错误_解决import tensorflow as tf 出错的原因
  5. git 删除本地仓库中的分支_本地 Git 仓库与 GitHub 关联
  6. qt中QMap与QMultimap用foreach遍历
  7. Android_内存泄露
  8. 正确注释@return让PHPstorm动态返回类
  9. 【算法】剑指 Offer 52. 两个链表的第一个公共节点
  10. caffe学习日记--lesson4:windows下caffe DEMO (mnist and cifar10)
  11. 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
  12. java抽组件,基于Java组件与基于请求的框架
  13. VC如何打开代码对应的界面编辑窗口
  14. 近期计划-2012年
  15. et文件怎么转成excel_图片转PDF怎么转?这些都是文件转换的好方法!
  16. 计算机专业学生学校活动,校园IT文化节活动策划方案
  17. 离散傅里叶变换matlab程序
  18. 境外业务性能优化实践
  19. 吴恩达授课,斯坦福CS230深度学习课程资源开放
  20. 【工具-DVWA】DVWA的安装和使用

热门文章

  1. Eclipse 启动项目错误:class not found
  2. Cartographer系列之三——ROS中的安装
  3. 2015年第46周五
  4. JsonCpp 入门教程
  5. mariadb密码问题
  6. An internal error occurred during: Retrieving archetypes:. GC overhead limit exceeded
  7. PHP中提问频率最高的11个面试题和答案
  8. openstack初探
  9. 网格分割后,边界点的获取方法
  10. 一个程序猿的生命周期