← 返回编程题库
coding-longest-window-abs-return-budget中等免费版2000ms未尝试

绝对收益累加不超出波动预算的最长尾部连续窗口

Longest Trailing Window Whose Absolute-Return Sum Stays Within a Volatility Budget

开始编码

实现 solution(returns: list[float], abs_return_budget: float) -> int。给定逐期带符号浮点收益序列 returns 与闭区间绝对收益预算上界 abs_return_budget,返回 **returns 中绝对值之和 sum_{k=l..r} abs(returns[k]) 不超过 abs_return_budget 的最长连续子段长度**。注意只有元素绝对值参与累加上界比较——returns[k] 的符号在累加前丢弃。长度为 1 的窗口 returns[i] 自身绝对值即为 abs(returns[i]),故任何单根绝对值已超过 abs_return_budget 的 bar 不能属于任何合规窗口。

例:solution([0.01, -0.02, 0.5, 0.015, -0.005, 0.02, -0.01, 0.008], 0.05) 返回 4。下标 2 处的 0.5 单根 abs(0.5)=0.5 已超出预算,任何跨越该位置的窗口都不合规。其右侧 [0.015, -0.005, 0.02, -0.01, 0.008] 的逐位绝对值前缀和为 0.015, 0.020, 0.040, 0.050, 0.058;长度 4 的窗口 [0.015, -0.005, 0.02, -0.01] 累计 0.05 恰好等于预算合规,扩到长度 5 时累计 0.058 越界。最长合规长度为 4。

空输入、对任意非零绝对值施以 abs_return_budget == 0,或所有元素绝对值均超过 abs_return_budget,结果均为 0。参考实现目标为 O(N) 时间 / O(1) 空间——双指针配单一累加器一次扫描即可。

函数骨架见 stubs/stub.py

实践背景

为某策略撰写 tear-sheet 时,风控团队除了平均收益、Sharpe 与回撤等常规列以外,有时还会附带一个"波动预算"描述符:在内部固定的预算范围内,每日收益绝对值(一种粗粒度的"日内总绝对位移"代理量)累计未超出该预算的最长连续交易日段有多长?该最长合规窗口长度作为一个整数回报上层作为市态指标——长段意味着策略处于平稳期可继续按既定节奏运行,短段则提示市态波动加剧、应缩减仓位。该描述符与"滑动方差落带"指标不同——这里约束的是总和的绝对值预算,每日线性累加,配合经典双指针模板单遍即可计算。

约束条件

  • 0 <= len(returns) <= 5000;每个元素为有限带符号浮点数,绝对值最高 1e6
  • abs_return_budget 为有限非负浮点数,取值范围 [0, 1e9];abs_return_budget == 0 时仅连续零回报段合规
  • 阈值边界为闭——窗口绝对值之和恰好等于 `abs_return_budget` 仍计入合规
  • 若每个 `abs(returns[i])` 均超过 `abs_return_budget`,则无任何合规窗口,答案为 0;空输入同样返回 0
  • 输出为整数长度,使用精确比对(不引入浮点容差)

样例

Case 1 · statement-example: signed returns within budget across spike

输入: [[0.01,-0.02,0.5,0.015,-0.005,0.02,-0.01,0.008],0.05]

期望: 4

预算 0.05 下,单根 0.5 的绝对值 0.5 已超出,无窗口可跨越下标 2。其后 [0.015, -0.005, 0.02, -0.01, 0.008] 的逐位 |.| 累加至长度 4 时(0.015+0.005+0.02+0.01=0.05)正好等于预算合规;扩到长度 5 时 0.058>0.05 越界。最长合规长度为 4。

Case 2 · statement-example: every magnitude exceeds budget

输入: [[0.2,-0.3,0.15,-0.4],0.1]

期望: 0

任何单根 |.| 均超过 0.1,故没有合规窗口,答案 0。

Case 3 · statement-example: full stream within budget

输入: [[0.001,-0.002,0.001,-0.003,0.002],1]

期望: 5

累计 |.| = 0.009 远小于 1.0,全段合规,长度 5。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

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

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

Case 1 · statement-example: signed returns within budget across spike

输入: [[0.01,-0.02,0.5,0.015,-0.005,0.02,-0.01,0.008],0.05]

期望: 4

预算 0.05 下,单根 0.5 的绝对值 0.5 已超出,无窗口可跨越下标 2。其后 [0.015, -0.005, 0.02, -0.01, 0.008] 的逐位 |.| 累加至长度 4 时(0.015+0.005+0.02+0.01=0.05)正好等于预算合规;扩到长度 5 时 0.058>0.05 越界。最长合规长度为 4。

Case 2 · statement-example: every magnitude exceeds budget

输入: [[0.2,-0.3,0.15,-0.4],0.1]

期望: 0

任何单根 |.| 均超过 0.1,故没有合规窗口,答案 0。

Case 3 · statement-example: full stream within budget

输入: [[0.001,-0.002,0.001,-0.003,0.002],1]

期望: 5

累计 |.| = 0.009 远小于 1.0,全段合规,长度 5。