Skip to content

Commit 8ba9a61

Browse files
author
whd
committed
upload
1 parent cbd4b6e commit 8ba9a61

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

432 All O`one Data Structure .py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
class AllOne(object):
2+
3+
def __init__(self):
4+
"""
5+
Initialize your data structure here.
6+
"""
7+
self.dic = {}
8+
self.lst = [sets.Set()]
9+
self.size = 0
10+
self.minValue = 0
11+
self.maxValue = 0
12+
13+
def inc(self, key):
14+
"""
15+
Inserts a new key <Key> with value 1. Or increments an existing key by 1.
16+
:type key: str
17+
:rtype: void
18+
"""
19+
if not key in self.dic:
20+
self.dic[key] = 0
21+
self.size += 1
22+
self.minValue = 1
23+
self.dic[key] += 1
24+
value = self.dic[key]
25+
26+
if value > 1:
27+
self.lst[value - 1].remove(key)
28+
if self.minValue == value - 1 and not len(self.lst[value - 1]):
29+
self.minValue = value
30+
31+
self.maxValue = max(self.maxValue, value)
32+
if len(self.lst) <= value:
33+
self.lst.append(sets.Set())
34+
self.lst[value].add(key)
35+
36+
37+
38+
def dec(self, key):
39+
"""
40+
Decrements an existing key by 1. If Key's value is 1, remove it from the data structure.
41+
:type key: str
42+
:rtype: void
43+
"""
44+
if not key in self.dic:
45+
return
46+
self.dic[key] -= 1
47+
value = self.dic[key]
48+
if not value:
49+
del self.dic[key]
50+
self.size -= 1
51+
else:
52+
self.lst[value].add(key)
53+
self.minValue = min(self.minValue, value)
54+
self.lst[value + 1].remove(key)
55+
if self.maxValue == value + 1 and not len(self.lst[value + 1]):
56+
self.maxValue -= 1
57+
58+
59+
def getMaxKey(self):
60+
"""
61+
Returns one of the keys with maximal value.
62+
:rtype: str
63+
"""
64+
if not self.size:
65+
return ''
66+
for e in self.lst[self.maxValue]:
67+
return e
68+
69+
def getMinKey(self):
70+
"""
71+
Returns one of the keys with Minimal value.
72+
:rtype: str
73+
"""
74+
if not self.size:
75+
return ''
76+
for e in self.lst[self.minValue]:
77+
return e
78+
79+
80+
# Your AllOne object will be instantiated and called as such:
81+
# obj = AllOne()
82+
# obj.inc(key)
83+
# obj.dec(key)
84+
# param_3 = obj.getMaxKey()
85+
# param_4 = obj.getMinKey()

0 commit comments

Comments
 (0)