时间轴
时间轴
2025-10-04
init
哈希表,vector O(1)删除
题目:
这题我本来以为 getRandom 只要概率相同即可,但是这个题检测时大概率设置了随机数种子,如果不是调用 rand()得出来的顺序必定和答案不同。这题主要用 hashmap 存储 val,index,用 vector 做随机访问插入时直接放入 vector 的最后一位,删除时将被删除的元素与最后一个元素交换位置,然后弹出最后一个元素 pop_back(),要记得更改 hashmap 中因为交换而使得最后一个元素的 Index。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | using std::unordered_map;using std::vector;class RandomizedSet { private: unordered_map<int, int> umap; vector<int> vec; public: RandomizedSet() { } bool insert(int val) { if (umap.count(val) == 0) { vec.push_back(val); umap[val] = vec.size() - 1; return true; } else { return false; } } bool remove(int val) { if (umap.count(val) == 0) { return false; } else { umap[vec.back()] = umap[val]; std::swap(vec[umap[val]], vec.back()); vec.pop_back(); umap.erase(val); return true; } } int getRandom() { return vec[std::rand() % vec.size()]; }}; |
