面向对象程序设计
380、O(1)时间插入、删除和获取随机元素
基本的类编写框架:private、public;O(1)用哈希表实现
class RandomizedSet {
public:
RandomizedSet() {
srand((unsigned)time(NULL)); //将系统时间转化为随机数
}
bool insert(int val) {
if (indices.count(val)) { //字典中某值的计数
return false;
}
int n = nums.size();
nums.push_back(val); // vector插入操作
indices[val] = n; // dict插入操作
return true;
}
bool remove(int val) {
if (!indices.count(val)) {
return false;
}
int index = indices[val];
int last = nums.back(); // vector最后的值
nums[index] = last;
indices[last] = index;
nums.pop_back(); // vector删除最后一个元素
indices.erase(val); // dict删除特定值元素
return true;
}
int getRandom() {
int randomIndex = rand()%nums.size(); // 随机数
return nums[randomIndex];
}
private:
vector<int> nums;
unordered_map<int, int> indices; // 无序字典,查找O(1)
};