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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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 时,每个窗口就是单个价格点,均值就等于该点本身。