Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
类似第380题,唯一不同是,可能有重复元素
要求用O(1)的时间复杂度实现插入、删除和随机输出一个值,用python的SortedList就完全不是Hard题了

插入:
用dict判断该元素是否已经存在,如果不存在,则SortedList add这个元素,dict记录这个元素出现过几次
删除:
SortedList 删除元素O(logn)
随机输出list中的一个值:
python有现成函数:random.choice

 1 #381
 2 #Runtime: 661 ms
 3 #Memory Usage: 70.6 MB
 4 
 5 from sortedcontainers import SortedList
 6 
 7 class RandomizedCollection(object):
 8 
 9     def __init__(self):
10         self.random_set = SortedList([])
11         self.id_dict = defaultdict(lambda:0)
12 
13     def insert(self, val):
14         """
15         :type val: int
16         :rtype: bool
17         """
18         self.random_set.add(val)
19         self.id_dict[val] += 1
20         return self.id_dict[val] == 1
21             
22     def remove(self, val):
23         """
24         :type val: int
25         :rtype: bool
26         """
27         if self.id_dict[val] == 0:
28             return False
29         self.random_set.remove(val)
30         self.id_dict[val] -= 1
31         return True
32         
33     def getRandom(self):
34         """
35         :rtype: int
36         """
37         return random.choice(self.random_set);
38 
39 
40 # Your RandomizedCollection object will be instantiated and called as such:
41 # obj = RandomizedCollection()
42 # param_1 = obj.insert(val)
43 # param_2 = obj.remove(val)
44 # param_3 = obj.getRandom()

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理