Skip to content

Commit 70e0de4

Browse files
committed
Time: 2898 ms (85.71%), Space: 42.5 MB (100%) - LeetHub
1 parent 4e22bcb commit 70e0de4

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# time complexity: O(nlogk)
2+
# space complexity: O(k)
3+
from collections import defaultdict
4+
from sortedcontainers import SortedList
5+
from typing import List
6+
7+
8+
class Helper:
9+
def __init__(self, x):
10+
self.x = x
11+
self.result = 0
12+
self.large = SortedList()
13+
self.small = SortedList()
14+
self.occ = defaultdict(int)
15+
16+
def insert(self, num):
17+
if self.occ[num] > 0:
18+
self.internalRemove((self.occ[num], num))
19+
self.occ[num] += 1
20+
self.internalInsert((self.occ[num], num))
21+
22+
def remove(self, num):
23+
self.internalRemove((self.occ[num], num))
24+
self.occ[num] -= 1
25+
if self.occ[num] > 0:
26+
self.internalInsert((self.occ[num], num))
27+
28+
def get(self):
29+
return self.result
30+
31+
def internalInsert(self, p):
32+
if len(self.large) < self.x or p > self.large[0]:
33+
self.result += p[0] * p[1]
34+
self.large.add(p)
35+
if len(self.large) > self.x:
36+
to_remove = self.large[0]
37+
self.result -= to_remove[0] * to_remove[1]
38+
self.large.remove(to_remove)
39+
self.small.add(to_remove)
40+
else:
41+
self.small.add(p)
42+
43+
def internalRemove(self, p):
44+
if p >= self.large[0]:
45+
self.result -= p[0] * p[1]
46+
self.large.remove(p)
47+
if self.small:
48+
to_add = self.small[-1]
49+
self.result += to_add[0] * to_add[1]
50+
self.small.remove(to_add)
51+
self.large.add(to_add)
52+
else:
53+
self.small.remove(p)
54+
55+
56+
class Solution:
57+
def findXSum(self, nums: List[int], k: int, x: int) -> List[int]:
58+
helper = Helper(x)
59+
result = []
60+
61+
for i in range(len(nums)):
62+
helper.insert(nums[i])
63+
if i >= k:
64+
helper.remove(nums[i - k])
65+
if i >= k - 1:
66+
result.append(helper.get())
67+
68+
return result

0 commit comments

Comments
 (0)