标签:read span remove 建立 ret alt red lse public
题目:
解答:
此题的正确解法是利用到了一个一维数组和一个 HashMap,其中数组用来保存数字,HashMap 用来建立每个数字和其在数组中的位置之间的映射。
1 class RandomizedSet { 2 public: 3 /** Initialize your data structure here. */ 4 RandomizedSet() { 5 6 } 7 8 /** Inserts a value to the set. Returns true if the set did not already contain the specified element. */ 9 bool insert(int val) 10 { 11 if (m.count(val)) 12 { 13 return false; 14 } 15 nums.push_back(val); 16 m[val] = nums.size() - 1; 17 return true; 18 19 } 20 21 /** Removes a value from the set. Returns true if the set contained the specified element. */ 22 bool remove(int val) { 23 if (!m.count(val)) 24 { 25 return false; 26 } 27 int last = nums.back(); 28 m[last] = m[val]; 29 nums[m[val]] = last; 30 nums.pop_back(); 31 m.erase(val); 32 return true; 33 34 } 35 36 /** Get a random element from the set. */ 37 int getRandom() { 38 return nums[rand() % nums.size()]; 39 } 40 41 private: 42 vector<int> nums; 43 unordered_map<int, int> m; 44 45 };
标签:read span remove 建立 ret alt red lse public
原文地址:https://www.cnblogs.com/ocpc/p/12831410.html