• 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
  • 相关阅读:
    更换笔记本电脑记录数据迁移过程
    solaris下的目录ls不到,却能cd进去
    轻松掌握ORACLE 11GR2的RAC实施
    魏公村口腔医院挂号
    springstrutshibernate学习
    oracle RAC启动序列
    HPUX内存监控
    DOM操作 vs. innerHTML
    oracle导入导出技巧
    jQuery幻灯片带缩略图平移滑动焦点图
  • 原文地址:https://www.cnblogs.com/asenyang/p/9740508.html
Copyright © 2020-2023  润新知