381. O(1) 时间插入、删除和获取随机元素 - 允许重复
链接: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) 时间插入、删除和获取随机元素 - 允许重复相关推荐
- 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复
力扣 O(1) 时间插入.删除和获取随机元素 - 允许重复 题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集 ...
- LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(vector + 哈希)
文章目录 1. 题目 2. 解题 1. 题目 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. ...
- leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 val 存在时,从 ...
- Leetcode每日一题:381.insert-delete-getrandom-o1-duplicates-allowed(时间插入、删除和获取随机元素-允许重复)
思路:这个题标签标的困难,但实际上没什么难度:随机和插入就用一个vector即可,随机生成len以内的数字temp,然后取出v[temp]就能达到要求:关键是remove这个操作,开始我用的常规遍历删 ...
- 常数时间插入、删除和获取随机元素
常数时间插入.删除和获取随机元素 设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构. insert(val): 当元素val不存在时,向集合中插入该项. remove(val): 元素v ...
- 算法刷题-O(1) 时间插入、删除和获取随机元素、汇总区间
文章目录 O(1) 时间插入.删除和获取随机元素 汇总区间 改写字符串 O(1) 时间插入.删除和获取随机元素 设计一个支持在_平均 _时间复杂度 **O(1) 下, **执行以下操作的数据结构. 注 ...
- 2022-1-28 Leetcode 380.O(1)时间插入、删除和获取随机元素
删除和插入的时间为 O(1)O(1)O(1)是哈希之类的,而O(1)O(1)O(1)的随机获取可以用数组实现. 所以比较好的方式是,使用数组实现数据的存储,使用哈希表存放数组的下标,每次删除的时候将数 ...
- LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)
1. 题目 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构. insert(val):当元素 val 不存在时,向集合中插入该项. remove(val):元素 val 存在时, ...
- LeetCode每日一题——380. O(1) 时间插入、删除和获取随机元素
目录 题目要求 示例 思路 题解 题目要求 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当 ...
最新文章
- python读取、写入、移动、复制文件(夹)以及其他关于文件(夹)的操作
- jittor和pytorch生成网络对比之esrgan
- SQL SERVER 导入EXCEL的存储过程
- python3 tensorflowprint错误_解决import tensorflow as tf 出错的原因
- git 删除本地仓库中的分支_本地 Git 仓库与 GitHub 关联
- qt中QMap与QMultimap用foreach遍历
- Android_内存泄露
- 正确注释@return让PHPstorm动态返回类
- 【算法】剑指 Offer 52. 两个链表的第一个公共节点
- caffe学习日记--lesson4:windows下caffe DEMO (mnist and cifar10)
- 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
- java抽组件,基于Java组件与基于请求的框架
- VC如何打开代码对应的界面编辑窗口
- 近期计划-2012年
- et文件怎么转成excel_图片转PDF怎么转?这些都是文件转换的好方法!
- 计算机专业学生学校活动,校园IT文化节活动策划方案
- 离散傅里叶变换matlab程序
- 境外业务性能优化实践
- 吴恩达授课,斯坦福CS230深度学习课程资源开放
- 【工具-DVWA】DVWA的安装和使用