最长平稳交易区间
Longest Stable Trading Streak
开始编码你正在为一支高频策略做事后归因,需要从日内 1 分钟收益率序列里
找出最长的一段“平稳交易”窗口——也就是那段时间内市场波动很小、
策略可以安心持仓的区间。形式化地说:给定收益率列表 returns 和阈值
epsilon,请返回最长的连续子区间长度,使得该区间内
max(returns[i..j]) - min(returns[i..j]) <= epsilon。
实现 solution(returns: list[float], epsilon: float) -> int。
当 returns 为空时返回 0;只要存在一个元素,单元素区间总是平稳的,所以答案至少为 1。
例如 solution([0.001, 0.002, -0.001, 0.05, 0.051, 0.049], 0.005) 应返回 3:
前 3 个元素 [0.001, 0.002, -0.001] 的极差为 0.003 ≤ 0.005,
后 3 个元素 [0.05, 0.051, 0.049] 的极差为 0.002 ≤ 0.005,
而横跨第 3 与第 4 个元素时极差立刻冲到 0.052,因此窗口在那里被迫切断。
朴素的 O(n²) 双层循环对小输入可行,但当 n 接近 10⁵ 时会超时——
请尽量做到线性扫描。
约束条件
- 0 ≤ returns.length ≤ 100000
- -1.0 ≤ returns[i] ≤ 1.0(已经是收益率,不是价格)
- 0.0 ≤ epsilon ≤ 2.0
- 若 returns 为空,返回 0
- 返回值是整数:最长平稳子区间的长度
样例
Case 1 · two distinct stable clusters
输入: [[0.001,0.002,-0.001,0.05,0.051,0.049],0.005]
期望: 3
前 3 个收益率极差 0.003,后 3 个极差 0.002,两段都是平稳窗口;跨过中间的跳跃后极差变为 0.052,超出阈值,所以最长平稳长度是 3。
Case 2 · single stable run with mild drift
输入: [[0.01,0.02,0.015,0.018,0.022,0.019],0.02]
期望: 6
整段的 max 与 min 分别是 0.022 与 0.01,极差 0.012 ≤ 0.02,所以全部 6 个点都在同一个平稳窗口内。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · two distinct stable clusters
输入: [[0.001,0.002,-0.001,0.05,0.051,0.049],0.005]
期望: 3
前 3 个收益率极差 0.003,后 3 个极差 0.002,两段都是平稳窗口;跨过中间的跳跃后极差变为 0.052,超出阈值,所以最长平稳长度是 3。
Case 2 · single stable run with mild drift
输入: [[0.01,0.02,0.015,0.018,0.022,0.019],0.02]
期望: 6
整段的 max 与 min 分别是 0.022 与 0.01,极差 0.012 ≤ 0.02,所以全部 6 个点都在同一个平稳窗口内。