Implement the RandomizedSet class:
RandomizedSet()
Initializes the RandomizedSet object.bool insert(int val)
Inserts an item val into the set if not present. Returns true if the item was not present, false otherwise.bool remove(int val)
Removes an item val from the set if present. Returns true if the item was present, false otherwise.int getRandom()
Returns a random element from the current set of elements (it’s guaranteed that at least one element exists when this method is called). Each element must have the same probability of being returned.实现 RandomizedSet 类:
RandomizedSet()
初始化 RandomizedSet 对象。bool insert(int val)
将一个元素 val
插入集合中,如果不存在则插入。如果元素不存在返回 true,否则返回 false。bool remove(int val)
从集合中移除一个元素 val
,如果存在则移除。如果元素存在返回 true,否则返回 false。int getRandom()
从当前集合中返回一个随机元素(保证调用这个方法时集合中至少有一个元素)。每个元素被返回的概率相同。Example 1:
["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
[[], [1], [2], [2], [], [1], [2], []]
[null, true, false, true, 2, true, false, 2]
-2^31 <= val <= 2^31 - 1
实现 RandomizedSet
类,该类支持在平均 O(1) 时间复杂度内执行插入、删除和获取随机元素的操作。算法的关键点在于使用一个哈希表和一个动态数组来有效地管理元素。具体实现步骤如下:
初始化:
unordered_map
(哈希表)valueIndexMap
来存储每个元素及其在数组中的索引。vector
(动态数组)values
来存储集合中的元素。插入操作 (insert
方法):
false
。删除操作 (remove
方法):
false
。获取随机元素 (getRandom
方法):
rand()
函数生成一个数组索引的随机数。class RandomizedSet {
std::unordered_map<int, int> valueIndexMap;
std::vector<int> values;
public:
RandomizedSet() {}
bool insert(int val) {
if (valueIndexMap.find(val) != valueIndexMap.end()) {
return false;
}
values.push_back(val);
valueIndexMap[val] = values.size() - 1;
return true;
}
bool remove(int val) {
if (valueIndexMap.find(val) == valueIndexMap.end()) {
return false;
}
int lastVal = values.back();
int idx = valueIndexMap[val];
values[idx] = lastVal;
valueIndexMap[lastVal] = idx;
values.pop_back();
valueIndexMap.erase(val);
return true;
}
int getRandom() {
int randomIndex = rand() % values.size();
return values[randomIndex];
}
};