← 返回编程题库
coding-k-day-rolling-mean-filter简单免费版2000ms未尝试

K 日滚动均价滤波

K-Day Rolling Mean Filter

开始编码

在量化交易里,滚动均价(也叫 *简单移动均线 SMA*)是最常见的去噪手段之一:把最近 K 根 K 线的收盘价取平均,用来消除单根 K 线的抖动,让趋势更直观。它也是布林带、动量信号、均线交叉等更复杂指标的基础构件。

请实现函数 solution(prices, K),输入一段价格时间序列 prices(按时间升序,长度可能为 0)和窗口长度 K,返回长度为 len(prices) - K + 1 的滚动均值列表,其中第 i 个元素等于 mean(prices[i : i+K])。如果 K > len(prices),返回空列表 []

示例solution([10.0, 12.0, 11.0, 13.0, 15.0], 3) 应返回 [11.0, 12.0, 13.0]。其中 (10+12+11)/3 = 11.0(12+11+13)/3 = 12.0(11+13+15)/3 = 13.0。注意输出列表比输入短 K-1 个元素——因为前 K-1 个时刻还没攒够一个完整窗口。

朴素双重循环可以工作,但当价格序列达到几十万根 1 分钟 K 线、K 又不小时就会明显变慢。请用滑动窗口的思路把每一步的开销压到 O(1),整体 O(n)。

约束条件

  • 0 ≤ len(prices) ≤ 100000
  • 1 ≤ K ≤ 100000
  • 0 < prices[i] ≤ 10⁶(保证为正实数报价)
  • 若 K > len(prices),返回空列表 `[]`
  • 返回的浮点数允许 1e-6 的相对误差

样例

Case 1 · basic 3-day window

输入: [[10,12,11,13,15],3]

期望: [11,12,13]

三个窗口分别是 [10,12,11]、[12,11,13]、[11,13,15],均值依次为 11.0、12.0、13.0。输出长度 = 5 - 3 + 1 = 3。

Case 2 · K=1 returns the prices unchanged

输入: [[100,101.5,99.75,102],1]

期望: [100,101.5,99.75,102]

窗口长度为 1 时,每个窗口就是单个价格点,均值就等于该点本身。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · basic 3-day window

输入: [[10,12,11,13,15],3]

期望: [11,12,13]

三个窗口分别是 [10,12,11]、[12,11,13]、[11,13,15],均值依次为 11.0、12.0、13.0。输出长度 = 5 - 3 + 1 = 3。

Case 2 · K=1 returns the prices unchanged

输入: [[100,101.5,99.75,102],1]

期望: [100,101.5,99.75,102]

窗口长度为 1 时,每个窗口就是单个价格点,均值就等于该点本身。