累计收益超阈值的子区间计数
Subranges Above Return Threshold
开始编码你正在对一只对数收益率序列做信号挖掘:策略组想知道,在历史窗口内,
有多少个连续交易日子区间累计对数收益超过门槛 R。这个数字直接决定
策略的潜在交易频次—— 如果阈值取得太高,几乎没有子区间能命中(信号过稀,
回测样本不足);阈值取得太低,几乎所有子区间都命中(信号没区分度)。
扫一遍各种 R 的命中数,就能为后续的参数选择给出粗粒度直觉。
请实现 solution(returns: list[float], R: float) -> int。returns 是按
时间升序排列的对数收益率序列;R 是收益门槛。返回所有满足
sum(returns[i..j]) >= R 的子区间 (i, j) 对数,其中 0 <= i <= j < n,
即区间长度至少为 1。注意子区间是连续的,不能跳着选;并且 i == j
的单日区间也是合法计数对象。判断使用 1e-9 的绝对容忍:只要
interval_sum >= R - 1e-9 就计入。
例如 solution([0.02, -0.01, 0.03, -0.005, 0.01], 0.02) 应返回 9。
共有 15 个子区间,按起点-终点列出累计收益:
(0,0)=0.02 ✓、(0,1)=0.01、(0,2)=0.04 ✓、(0,3)=0.035 ✓、(0,4)=0.045 ✓、
(1,1)=-0.01、(1,2)=0.02 ✓、(1,3)=0.015、(1,4)=0.025 ✓、
(2,2)=0.03 ✓、(2,3)=0.025 ✓、(2,4)=0.035 ✓、
(3,3)=-0.005、(3,4)=0.005、(4,4)=0.01。打 ✓ 的共 9 个,所以答案是 9。
朴素的三重循环 O(n³) 在 n = 3000 时是 270 亿次操作,明显超时。把序列
预处理成前缀和,再做两重循环把每次区间求和压成一次减法,整体 O(n²) ——
对 n = 3000 大约是 450 万次比较,能在 1 秒内完成。当前框架的参考实现位于
solutions/solution.py,提交时请填写 stubs/stub.py。
约束条件
- 0 ≤ len(returns) ≤ 3000
- -1.0 ≤ returns[i] ≤ 1.0(对数收益率,可正可负)
- -1000.0 ≤ R ≤ 1000.0
- 返回 `int`:满足条件的 `(i, j)` 子区间对数(其中 `0 <= i <= j < n`,区间长度至少为 1)
- 比较使用浮点容忍:当 `interval_sum >= R - 1e-9` 时视为达标
- 若 `returns` 为空,返回 0
样例
Case 1 · statement example: 5 returns, R=0.02
输入: [[0.02,-0.01,0.03,-0.005,0.01],0.02]
期望: 9
穷举 15 个子区间,累计收益 >= 0.02 的有 9 个:(0,0)=0.02、(0,2)=0.04、(0,3)=0.035、(0,4)=0.045、(1,2)=0.02、(1,4)=0.025、(2,2)=0.03、(2,3)=0.025、(2,4)=0.035。
Case 2 · exact-threshold boundary: tolerance picks up sums equal to R
输入: [[0.01,0.02,0.03],0.05]
期望: 2
6 个子区间累计收益分别为 0.01、0.02、0.03、0.03、0.05、0.06。其中 >= 0.05 的有两个:(1,2)=0.05 和 (0,2)=0.06。注意 0.05 在 1e-9 容忍下应被计入。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement example: 5 returns, R=0.02
输入: [[0.02,-0.01,0.03,-0.005,0.01],0.02]
期望: 9
穷举 15 个子区间,累计收益 >= 0.02 的有 9 个:(0,0)=0.02、(0,2)=0.04、(0,3)=0.035、(0,4)=0.045、(1,2)=0.02、(1,4)=0.025、(2,2)=0.03、(2,3)=0.025、(2,4)=0.035。
Case 2 · exact-threshold boundary: tolerance picks up sums equal to R
输入: [[0.01,0.02,0.03],0.05]
期望: 2
6 个子区间累计收益分别为 0.01、0.02、0.03、0.03、0.05、0.06。其中 >= 0.05 的有两个:(1,2)=0.05 和 (0,2)=0.06。注意 0.05 在 1e-9 容忍下应被计入。