classRandomizedSet { public: /** Initialize your data structure here. */ RandomizedSet() { } /** Inserts a value to the set. Returns true if the set did not already contain the specified element. */ boolinsert(int val){ if(this->hash.find(val) != this->hash.end()) returnfalse; this->hash[val] = this->nums.size(); this->nums.push_back(val); returntrue; } /** Removes a value from the set. Returns true if the set contained the specified element. */ boolremove(int val){ auto iter = this->hash.find(val); if(iter == this->hash.end()) returnfalse; int originIndex = iter->second; this->swap(nums, originIndex, this->nums.size() - 1); this->hash[this->nums[originIndex]] = originIndex; this->nums.pop_back(); this->hash.erase(val); returntrue; } voidswap(vector<int>& nums, int left, int right){ int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; } /** Get a random element from the set. */ intgetRandom(){ if (this->nums.size() == 0) return-1; returnthis->nums[rand() % (this->nums.size())]; } private: unordered_map<int, int> hash; vector<int> nums; };
/** * 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(); */