LeetCode381. O(1) 時間插入、刪除和獲取隨機元素 - 允許重複
//381. O(1) 時間插入、刪除和獲取隨機元素 - 允許重複
/*
* 使用陣列來儲存所有元素
* 因為不需要考慮順序,所以插入的話,直接放在陣列後面就可以,常數時間
* 主要是刪除,刪除的時候,需要先查詢元素所在的位置,然後刪除
* 查詢的時候,可以通過雜湊map和set結合,記錄各種元素的位置
* 用這種方法可以使查詢的時間變為常數時間
* 查詢之後,就是刪除
* 刪除的話可以將當前元素和陣列的最後一個元素互換內容,然後刪除陣列的最後一個元素,時間也是常數
* 刪除之後,更新一下元素的位置即可
*/
class RandomizedCollection {
public:
unordered_map<int, unordered_set<int>> id;
vector<int>nums;
/** Initialize your data structure here. */
RandomizedCollection() {
}
/** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */
bool insert(int val) {
id[val].emplace(nums.size());
nums.emplace_back(val);
return id[val].size() == 1;
}
/** Removes a value from the collection. Returns true if the collection contained the specified element. */
bool remove(int val) {
if (id[val].empty()) return false;
int vid = *(id[val].begin());
nums[vid] = nums.back();
id[val].erase(vid);
id[nums.back()].erase(nums.size() - 1);
if (vid != nums.size() - 1) id[nums.back()].emplace(vid);
nums.pop_back();
return true;
}
/** Get a random element from the collection. */
int getRandom() {
return nums[rand() % nums.size()];
}
};
/**
* Your RandomizedCollection object will be instantiated and called as such:
* RandomizedCollection* obj = new RandomizedCollection();
* bool param_1 = obj->insert(val);
* bool param_2 = obj->remove(val);
* int param_3 = obj->getRandom();
*/
相關文章
- O(1) 時間插入、刪除和獲取隨機元素,允許元素重複隨機
- [M設計+雜湊表] lc380. 常數時間插入、刪除和獲取隨機元素(設計+雜湊表)隨機
- java獲取時間戳和隨機數Java時間戳隨機
- Java ArrayList 查詢、刪除指定元素;排序;遍歷;隨機獲取元素等常用操作Java排序隨機
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- JavaScript陣列刪除重複元素JavaScript陣列
- 如何刪除ArrayList中的重複元素
- 集合框架-獲取無重複的隨機數案例框架隨機
- Java 獲取Word中的所有插入和刪除修訂Java
- js刪除陣列中重複的元素JS陣列
- js刪除陣列中的重複元素JS陣列
- javascript刪除陣列重複元素程式碼JavaScript陣列
- 編寫一個程式,獲取10個1至20的隨機數,要求隨機數不能重複。隨機
- java 無重複取隨機數Java隨機
- ES6刪除字串中重複的元素字串
- Java從List中獲取隨機元素Java隨機
- JavaScript 獲取0-1之間的隨機數JavaScript隨機
- 隨機列印0-100的全部數字並且不可重複,時間複雜度為O(n)隨機時間複雜度
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- javascript刪除陣列重複元素程式碼例項JavaScript陣列
- 演算法提高 11-2刪除重複元素演算法
- js刪除陣列重複元素程式碼例項JS陣列
- javascript刪除陣列中的重複元素程式碼JavaScript陣列
- 時間複雜度O(n)和空間複雜度時間複雜度
- 獲取當前時間戳和隨機數的獲取、Java Random、ThreadLocalRandom、UUID類中的方法應用(隨機數)時間戳隨機JavarandomthreadUI
- javascript刪除陣列中重複元素程式碼例項JavaScript陣列
- Java刪除ArrayList中的重複元素的2種方法Java
- 建立元素和刪除元素
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- 刪除重複資料
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- mysql 刪除重複項MySql
- JavaScript基礎 釋出評論/刪除評論/獲取時間JavaScript
- cookie的設定、獲取和刪除Cookie
- js連線多個陣列並刪除重複的元素JS陣列
- 演算法刪除單連結串列中重複的元素演算法