Skip to content

Commit e086812

Browse files
authored
feat: add solutions to lc problem: No.3369 (#3834)
1 parent 5897014 commit e086812

File tree

3 files changed

+134
-2
lines changed

3 files changed

+134
-2
lines changed

solution/3300-3399/3369.Design an Array Statistics Tracker/README.md

+45-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,51 @@ statisticsTracker.getMode(); // return 5</div>
109109
#### Python3
110110

111111
```python
112-
112+
from sortedcontainers import SortedList
113+
114+
115+
class StatisticsTracker:
116+
117+
def __init__(self):
118+
self.q = deque()
119+
self.s = 0
120+
self.cnt = defaultdict(int)
121+
self.sl = SortedList()
122+
self.sl2 = SortedList(key=lambda x: (-x[1], x[0]))
123+
124+
def addNumber(self, number: int) -> None:
125+
self.q.append(number)
126+
self.sl.add(number)
127+
self.sl2.discard((number, self.cnt[number]))
128+
self.cnt[number] += 1
129+
self.sl2.add((number, self.cnt[number]))
130+
self.s += number
131+
132+
def removeFirstAddedNumber(self) -> None:
133+
number = self.q.popleft()
134+
self.sl.remove(number)
135+
self.sl2.discard((number, self.cnt[number]))
136+
self.cnt[number] -= 1
137+
self.sl2.add((number, self.cnt[number]))
138+
self.s -= number
139+
140+
def getMean(self) -> int:
141+
return self.s // len(self.q)
142+
143+
def getMedian(self) -> int:
144+
return self.sl[len(self.q) // 2]
145+
146+
def getMode(self) -> int:
147+
return self.sl2[0][0]
148+
149+
150+
# Your StatisticsTracker object will be instantiated and called as such:
151+
# obj = StatisticsTracker()
152+
# obj.addNumber(number)
153+
# obj.removeFirstAddedNumber()
154+
# param_3 = obj.getMean()
155+
# param_4 = obj.getMedian()
156+
# param_5 = obj.getMode()
113157
```
114158

115159
#### Java

solution/3300-3399/3369.Design an Array Statistics Tracker/README_EN.md

+45-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,51 @@ statisticsTracker.getMode(); // return 5</div>
107107
#### Python3
108108

109109
```python
110-
110+
from sortedcontainers import SortedList
111+
112+
113+
class StatisticsTracker:
114+
115+
def __init__(self):
116+
self.q = deque()
117+
self.s = 0
118+
self.cnt = defaultdict(int)
119+
self.sl = SortedList()
120+
self.sl2 = SortedList(key=lambda x: (-x[1], x[0]))
121+
122+
def addNumber(self, number: int) -> None:
123+
self.q.append(number)
124+
self.sl.add(number)
125+
self.sl2.discard((number, self.cnt[number]))
126+
self.cnt[number] += 1
127+
self.sl2.add((number, self.cnt[number]))
128+
self.s += number
129+
130+
def removeFirstAddedNumber(self) -> None:
131+
number = self.q.popleft()
132+
self.sl.remove(number)
133+
self.sl2.discard((number, self.cnt[number]))
134+
self.cnt[number] -= 1
135+
self.sl2.add((number, self.cnt[number]))
136+
self.s -= number
137+
138+
def getMean(self) -> int:
139+
return self.s // len(self.q)
140+
141+
def getMedian(self) -> int:
142+
return self.sl[len(self.q) // 2]
143+
144+
def getMode(self) -> int:
145+
return self.sl2[0][0]
146+
147+
148+
# Your StatisticsTracker object will be instantiated and called as such:
149+
# obj = StatisticsTracker()
150+
# obj.addNumber(number)
151+
# obj.removeFirstAddedNumber()
152+
# param_3 = obj.getMean()
153+
# param_4 = obj.getMedian()
154+
# param_5 = obj.getMode()
111155
```
112156

113157
#### Java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from sortedcontainers import SortedList
2+
3+
4+
class StatisticsTracker:
5+
def __init__(self):
6+
self.q = deque()
7+
self.s = 0
8+
self.cnt = defaultdict(int)
9+
self.sl = SortedList()
10+
self.sl2 = SortedList(key=lambda x: (-x[1], x[0]))
11+
12+
def addNumber(self, number: int) -> None:
13+
self.q.append(number)
14+
self.sl.add(number)
15+
self.sl2.discard((number, self.cnt[number]))
16+
self.cnt[number] += 1
17+
self.sl2.add((number, self.cnt[number]))
18+
self.s += number
19+
20+
def removeFirstAddedNumber(self) -> None:
21+
number = self.q.popleft()
22+
self.sl.remove(number)
23+
self.sl2.discard((number, self.cnt[number]))
24+
self.cnt[number] -= 1
25+
self.sl2.add((number, self.cnt[number]))
26+
self.s -= number
27+
28+
def getMean(self) -> int:
29+
return self.s // len(self.q)
30+
31+
def getMedian(self) -> int:
32+
return self.sl[len(self.q) // 2]
33+
34+
def getMode(self) -> int:
35+
return self.sl2[0][0]
36+
37+
38+
# Your StatisticsTracker object will be instantiated and called as such:
39+
# obj = StatisticsTracker()
40+
# obj.addNumber(number)
41+
# obj.removeFirstAddedNumber()
42+
# param_3 = obj.getMean()
43+
# param_4 = obj.getMedian()
44+
# param_5 = obj.getMode()

0 commit comments

Comments
 (0)