全部报价位于容差带内的 K 期窗口计数
Count K-Tick Windows With Every Quote Inside the Tolerance Band
开始编码实现 solution(quotes: list[float], band_low: float, band_high: float, window: int) -> int。给定一段长度为 N 的逐期报价中值序列 quotes、带下界 band_low、带上界 band_high(满足 band_low <= band_high),以及定长窗口 window(满足 1 <= window <= N),返回 quotes 中所有长度为 window 的连续子窗口中,每个元素 q 都满足 band_low <= q <= band_high 的窗口的整数数量。边界值包含:报价恰好等于 band_low 或 band_high 视为在带内。若 band_low > band_high(退化空带),则返回哨兵 -1。
例
solution([1.0, 2.5, 3.0, 4.5, 2.0, 6.0, 1.5], 1.0, 5.0, 3) 返回 3。共有 5 个长度为 3 的连续窗口。窗口 0 [1.0, 2.5, 3.0] 全部位于 [1.0, 5.0] 内;窗口 1 [2.5, 3.0, 4.5] 全部在带内;窗口 2 [3.0, 4.5, 2.0] 全部在带内;窗口 3 [4.5, 2.0, 6.0] 有 6.0 > 5.0,不合格;窗口 4 [2.0, 6.0, 1.5] 同样含 6.0,不合格。对应的越界指示滑动和为 [0, 0, 0, 1, 1],因此合格窗口共 3 个,计数为 3。
函数骨架见 stubs/stub.py。
实践背景
某交易台的报价质量监控会扫描进入的报价中值,统计连续 K 个 tick 内报价始终位于交易员"防陈旧"容差带之内(含两端边界)的次数。这一计数是一种微观结构层面的行情质量统计:满足条件的连续段越多,行情越平稳;越少,则说明波动加剧或带宽偏紧。由于逐 tick 流可能很长而看板刷新频繁,标准做法是维护一个 O(1) 更新的越界指示滑动求和,而不是每次重扫整段切片。
约束条件
- 1 <= N <= 5000,其中 N = len(quotes);每个报价为有符号浮点数,绝对值不超过 1e6
- 窗口长度 K 为整数,满足 1 <= K <= N
- 正常合约下带的边界满足 -1e6 <= band_low <= band_high <= 1e6;当 band_low > band_high(退化)时函数返回哨兵 -1
- 边界值**包含**:报价 q 在带内当且仅当 band_low <= q <= band_high
- 输出为 `quotes` 中所有长度为 K 的连续子窗口中所有元素都落入闭带的窗口个数(若带退化则返回 -1)
样例
Case 1 · statement-example: mixed quotes, two windows breach via 6.0
输入: [[1,2.5,3,4.5,2,6,1.5],1,5,3]
期望: 3
5 个长度为 3 的窗口越界指示和为 [0,0,0,1,1];前三个窗口全部位于 [1.0, 5.0] 内,故计数为 3。
Case 2 · statement-example: window equals length, all in band
输入: [[2,3,4,2.5],2,4,4]
期望: 1
N == K,唯一窗口 [2.0, 3.0, 4.0, 2.5] 全部位于 [2.0, 4.0],返回 1。
Case 3 · statement-example: degenerate band returns sentinel -1
输入: [[1,2,3],5,1,2]
期望: -1
band_low = 5.0 > band_high = 1.0,触发哨兵:返回 -1。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: mixed quotes, two windows breach via 6.0
输入: [[1,2.5,3,4.5,2,6,1.5],1,5,3]
期望: 3
5 个长度为 3 的窗口越界指示和为 [0,0,0,1,1];前三个窗口全部位于 [1.0, 5.0] 内,故计数为 3。
Case 2 · statement-example: window equals length, all in band
输入: [[2,3,4,2.5],2,4,4]
期望: 1
N == K,唯一窗口 [2.0, 3.0, 4.0, 2.5] 全部位于 [2.0, 4.0],返回 1。
Case 3 · statement-example: degenerate band returns sentinel -1
输入: [[1,2,3],5,1,2]
期望: -1
band_low = 5.0 > band_high = 1.0,触发哨兵:返回 -1。