1825. Find MK Average
Solution Approach
Maintain 3 multisets: lower (the smallest k elements), middle (elements in between), and upper (the largest k elements).
Insert Operation
- If
num ≤ max(lower), insertnumintolower - If
num ≥ min(upper), insertnumintoupper - Otherwise, insert
numintomiddle
After insertion, if lower or upper has more than k elements, transfer an element to middle.
Throughout the operation, maintain the element sum of middle.
Delete Operation
- Let the element to delete be
d dmust exist in one or more oflower,middle, orupper- Delete from the appropriate set
After deletion, if lower or upper has fewer than k elements, retrieve an element from middle.
Throughout the operation, maintain the element sum of middle.
Average Operation
(rounded down).
Code with issues:
class MKAverage:
def __init__(self, m: int, k: int):
self.m = m
self.k = k
self.list1 = []
def addElement(self, num: int) -> None:
self.list1.append(num)
def calculateMKAverage(self) -> int:
if len(self.list1) < self.m:
return -1
else:
list2 = self.list1[-1:-self.m-1:-1]
list2 = sorted(list2)
list2 = list2[self.k:len(list2) - self.k]
return sum(list2) // len(list2)贡献者
最近更新
Involution Hell© 2026 byCommunityunderCC BY-NC-SA 4.0
1664. Number of schemes to generate balance numbers One question daily
LeetCode 1664. 生成平衡数组的方案数 题解 — 使用动态规划与奇偶性分析,核心技巧是预处理前缀奇偶和与后缀奇偶和,在枚举删除每个元素时 O(1) 判断剩余数组奇偶下标和是否相等。适合准备算法面试、刷 LeetCode 中等题的求职者和 CS 学生。
1825. Seek out MK average value
LeetCode 1825. 求出 MK 平均值 题解 — 使用三个 multiset 维护滑动窗口中的最小值、中间值和最大值集合,通过平衡插入与删除操作保持 lower 和 upper 各含 k 个元素,并实时维护 middle 的元素和以 O(log n) 计算剔除首尾 k 个后的平均值。适合准备系统设计面试或需要掌握有序集合与滑动窗口技巧的算法学习者。