实现RandomizedSet 类:
RandomizedSet() 初始化 RandomizedSet 对象
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。
字节面试遇到过的题
考虑删除的时候把最后一个数换到当前要删除的位置
cpp
class RandomizedSet {
vector<int>v;
unordered_map<int,int>mp1;
public:
RandomizedSet() {
v.clear();
mp1.clear();
}
bool insert(int val) {
if(mp1.find(val)==mp1.end())
{
v.push_back(val);
mp1[val]=v.size()-1;
return true;
}
return false;
}
bool remove(int val) {
if(mp1.find(val)!=mp1.end())
{
int end_num=v.back();
v.pop_back();
int pos=mp1[val];
v[pos]=end_num;
mp1[end_num]=pos;
mp1.erase(val);
return true;
}
return false;
}
int getRandom() {
int pos=rand()%v.size();
return v[pos];
}
};