首页 > 试题广场 >

滑动窗口中位数

[编程题]滑动窗口中位数
  • 热度指数:1047 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的正整数数组,和一个窗口长度 k ,有一个长度为 k 的窗口从最左端滑到最右端。请你算出所有窗口的中位数。
中位数是有序数组最中间的数,如果序列长度是偶数,中位数就是两个最中间的数的平均数。

数据范围:数组长度满足 ,数组中的值满足
示例1

输入

[4,5,9,7,8,5],3

输出

[5,7,8,7]
示例2

输入

[4,5,9,7,8,5],4

输出

[6,7.5,7.5]
头像 姐姐的遮阳伞
发表于 2022-04-14 19:20:36
思路: 自己维护一个窗口,使窗口里面的数字是有序的。如果能够做到这一点,那么我们每次取中位数就相当方便了。大致思路有了之后,我们应该解决下面问题 窗口应该使用什么数据结构? 在这里,我们使用 ArrayList,选取的理由主要是查找速度相对于 LinkedList 更快。我们需要频繁地插入数据,每 展开全文
头像 agctXY
发表于 2024-11-15 23:12:24
思路一开始就有了,本以为会很快通过,结果被边界条件卡了很久.显然要用到滑动窗口,窗口每次滑动时会加入和删除一个数字.容易想到使用std::multiset来维护递增序列,并且std::multiset的插入和删除都是O(logK).那么如何找到这个序列的中位数呢? - 初始化时,需要从mult 展开全文
头像 17c89
发表于 2024-11-13 13:59:07
import java.util.*; /** * NC395 滑动窗口中位数 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * <p 展开全文