3321.计算子数组的 x-sum II
题目描述
给你一个由 n 个整数组成的数组 nums,以及两个整数 k 和 x。
数组的 x-sum 计算按照以下步骤进行:
- 统计数组中所有元素的出现次数。
- 仅保留出现次数最多的前 x 个元素的每次出现。如果两个元素的出现次数相同,则数值 较大 的元素被认为出现次数更多。
- 计算结果数组的和。
注意,如果数组中的不同元素少于 x 个,则其 x-sum 是数组的元素总和。
返回一个长度为 n - k + 1 的整数数组 answer,其中 answer[i] 是 子数组 nums[i..i + k - 1] 的 x-sum。
子数组 是数组内的一个连续 非空 的元素序列。
示例1:
1 | |
提示1:
1 | |
对顶堆
实际上是求滑动窗口的前 $x$ 大元素的和(这里的比较条件是出现次数)。
类似 对顶堆 的思路,只需要将比较条件改成计数以及额外再维护一个 $sum$ ,但注意到 Java 中堆删除一个指定元素是慢的,所以使用TreeMap来实现堆的功能。
时间复杂度 $O(NlogK)$ 。
1 | |
3321.计算子数组的 x-sum II
https://wecgwm.github.io/2025/11/04/LC-3321-计算子数组的 x-sum II/