2023每日刷题(五十七)
Leetcode—380.O(1) 时间插入、删除和获取随机元素
算法思想
实现代码
class RandomizedSet {
public:
vector<int> nums;
unordered_map<int, int> dict;
RandomizedSet() {
srand((unsigned)time(NULL));
}
bool insert(int val) {
if(dict.find(val) != dict.end()) {
return false;
}
nums.push_back(val);
int idx = nums.size() - 1;
dict[val] = idx;
return true;
}
bool remove(int val) {
if(dict.find(val) == dict.end()) {
return false;
}
int idx = dict[val];
int last = nums.back();
// 用最后元素代替被删除元素
nums[idx] = last;
dict[last] = idx;
nums.pop_back();
dict.erase(val);
return true;
}
int getRandom() {
int n = nums.size();
int pos = rand() % n;
return nums[pos];
}
};
/**
* 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();
*/
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!