博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(Array, hashtable, design) leetcode 380. Insert Delete GetRandom
阅读量:4646 次
发布时间:2019-06-09

本文共 1632 字,大约阅读时间需要 5 分钟。

注意:对于insert操作,这个将插入的元素若存在,返回false,否则插入。

对于delete操作,删除成功后返回true;若hashtable中不存在这个元素返回false。

思路:insert和delete操作用unordered_map来实现O(1)的时间复杂度,但是不方便随机取出一个元素;GetRandom 用 一个数组vector来随机取数。

class RandomizedSet {public:    unordered_map
mp; //(val, index) vector
vals; //数组存储元素,便于getRandom操作 /** Initialize your data structure here. */ RandomizedSet() { } /** Inserts a value to the set. Returns true if the set did not already contain the specified element. */ bool insert(int val) { if(mp.find(val) != mp.end()) return false; //数组中已经存在此元素 mp[val] = vals.size(); //mp 的value 为 数组中对应元素的索引 vals.push_back(val); return true; } /** Removes a value from the set. Returns true if the set contained the specified element. */ bool remove(int val) { if(mp.find(val) == mp.end()) return false; //找不到对应元素 int index = mp[val]; //index为要删除元素在数组中的位置 mp[vals.back()] = index; //因为要把数组中val和最后一个元素交换位置,所以将mp中最后一个元素的索引替换为val的索引 mp.erase(val); swap(vals[index], vals.back() ); //将val和最后一个元素交换位置后删除最后一个元素,即val vals.pop_back(); return true; } /** Get a random element from the set. */ int getRandom() { int index = rand()%vals.size(); //取随机值 return vals[index]; }};/** * Your RandomizedSet object will be instantiated and called as such: * RandomizedSet* obj = new RandomizedSet(); * bool param_1 = obj->insert(val); * bool param_2 = obj->remove(val); * int param_3 = obj->getRandom(); */

 

转载于:https://www.cnblogs.com/Bella2017/p/11264525.html

你可能感兴趣的文章
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
MyEclipse安装Freemarker插件
查看>>
计算多项式的值
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
查看>>
最强的篮球队和马尔可夫模型
查看>>
pyQt 每日一练习 -- 登录框
查看>>
wp 删除独立存储空间文件(多级非空文件夹删除)
查看>>
Loadrunner安装使用入门
查看>>
smartupload 上传文件时 把页面编码改成gbk 解决乱码
查看>>
EPS是什么格式
查看>>
Python的数据库操作(Sqlalchemy)
查看>>