File tree 1 file changed +85
-0
lines changed
1 file changed +85
-0
lines changed Original file line number Diff line number Diff line change
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()
You can’t perform that action at this time.
0 commit comments