← 返回编程题库
coding-count-in-band-k-windows简单免费版2000ms未尝试

全部报价位于容差带内的 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_lowband_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 可见样例;服务端提交会运行可见样例和隐藏测试。

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

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

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。