1825. Finding MK Average - cocoder39/coco39_LC GitHub Wiki
1825. Finding MK Average
from sortedcontainers import SortedList
class MKAverage:
def __init__(self, m: int, k: int):
self.m, self.k = m, k
self.deque = collections.deque()
self.sl = SortedList()
self.total = self.first_k = self.last_k = 0
def addElement(self, num: int) -> None:
self.total += num
self.deque.append(num)
index = self.sl.bisect_left(num)
if index < self.k:
self.first_k += num
if len(self.sl) >= self.k:
self.first_k -= self.sl[self.k - 1]
if index >= len(self.sl) + 1 - self.k:
self.last_k += num
if len(self.sl) >= self.k:
self.last_k -= self.sl[-self.k]
self.sl.add(num)
if len(self.deque) > self.m:
num = self.deque.popleft()
self.total -= num
index = self.sl.index(num)
if index < self.k:
self.first_k -= num
self.first_k += self.sl[self.k]
elif index >= len(self.sl) - self.k:
self.last_k -= num
self.last_k += self.sl[-self.k - 1]
self.sl.remove(num)
def calculateMKAverage(self) -> int:
if len(self.sl) < self.m:
return -1
return (self.total - self.first_k - self.last_k) // (self.m - 2 * self.k)