zoukankan      html  css  js  c++  java
  • leetcode380

    class RandomizedSet {
    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. */
        bool insert(int val) {
            if(hash.count(val)) return false;
            hash[val] = vec.size();
            vec.push_back(val);
            return true;
        }
        
        /** Removes a value from the set. Returns true if the set contained the specified element. */
        bool remove(int val) {
            if(hash.count(val)==0) return false;        
            int pos = hash[val];        
            hash[vec.back()] = pos;        
            swap(vec[pos], vec[vec.size()-1]);        
            hash.erase(val);        
            vec.pop_back();        
            return true;
    
        }
        
        /** Get a random element from the set. */
        int getRandom() {
            return vec[rand()%vec.size()];
        }
    
    private:
        unordered_map<int, int> hash;
        vector<int> vec;
    };
    
    /**
     * 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();
     */

    数据结构设计问题,从网上找的参考答案。

    根据以上的思路,写了一份python版本的代码:

     1 class RandomizedSet:
     2     def __init__(self):
     3         """
     4         Initialize your data structure here.
     5         """
     6         self.dic = dict()
     7         self.l = list()
     8         self.length = 0
     9         
    10 
    11     def insert(self, val: int) -> bool:
    12         """
    13         Inserts a value to the set. Returns true if the set did not already contain the specified element.
    14         """
    15         if val in self.dic:
    16             return False
    17         else:
    18             self.dic[val] = self.length
    19             self.l.append(val)
    20             self.length += 1
    21             return True
    22 
    23     def remove(self, val: int) -> bool:
    24         """
    25         Removes a value from the set. Returns true if the set contained the specified element.
    26         """
    27         if val not in self.dic:
    28             return False
    29         else:
    30             self.dic.pop(val)
    31             self.l.remove(val)
    32             self.length -= 1
    33             return True
    34         
    35     def getRandom(self) -> int:
    36         """
    37         Get a random element from the set.
    38         """
    39         rnd = int(random.uniform(0, self.length))
    40         key = self.l[rnd]
    41         return key
  • 相关阅读:
    ubuntu shell插件
    通过更改服务器解决双系统ubuntu时间+8
    ubuntu安装mysql遇到的问题
    05 面向对象:构造方法&static&继承&方法 &final
    electron 大体结构
    js时间Date对象介绍及解决getTime转换为8点的问题
    Fiddler命令行和HTTP断点调试
    使用HTTP头去绕过WAF(bypasswaf)
    Linux下php5.3.3安装mcrypt扩展
    Error: Cannot find a valid baseurl for repo: epel
  • 原文地址:https://www.cnblogs.com/asenyang/p/9740508.html
Copyright © 2011-2022 走看看