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

绝对收益累加首次达到压力预算阈值的最短连续窗口

Shortest Contiguous Window Whose Absolute-Return Sum First Reaches a Stress-Budget Target

开始编码

实现 solution(returns: list[float], abs_return_target: float) -> int。给定逐期带符号浮点收益序列 returns 与严格正阈值 abs_return_target,返回 **returns 中绝对值之和 sum_{k=l..r} abs(returns[k]) 不小于 abs_return_target 的最短连续子段长度**。仅元素绝对值参与累加比较——returns[k] 的符号在累加前丢弃。长度为 1 的窗口 returns[i] 自身绝对值即为 abs(returns[i]),故任何单根绝对值已达到阈值的 bar 直接给出长度 1 答案。

solution([0.005, -0.008, 0.012, -0.004, 0.006, -0.015, 0.003, 0.009], 0.025) 返回 3。逐位绝对值为 [0.005, 0.008, 0.012, 0.004, 0.006, 0.015, 0.003, 0.009],无任何单根 bar 自身绝对值达到阈值 0.025,故答案必大于 1。最大相邻两位绝对值之和为 [4..5]0.006 + 0.015 = 0.021,仍不足阈值,故无任何长度 2 窗口合规。双指针扫描,第一个合规窗口为 [0..2]0.005 + 0.008 + 0.012 = 0.025 恰好等阈值,长度 3。其余长度 3 的合规窗口包括 [3..5](和 0.025)与 [5..7](和 0.027)。故最短合规长度为 3

returns 为空,或全段绝对和小于 abs_return_target,返回哨兵 -1。参考实现目标为 O(N) 时间 / O(1) 空间——双指针配单一累加器一次扫描即可。

函数骨架见 stubs/stub.py

实践背景

为某策略撰写 tear-sheet 时,风控团队除了平均收益、Sharpe 与回撤等常规列以外,有时还会附带一个"最小触达波动预算"描述符——它正是平稳期长度描述符的对偶:策略每日收益绝对值(一种粗粒度的"日内总绝对位移"代理量)累计首次达到内部固定的压力预算阈值,所对应的最短连续交易日段有多长?该最短合规窗口长度作为一个整数湍流指标回报上层——若长度很小则提示几根 bar 内便耗尽全部压力预算(对应短促剧烈位移,建议缩仓);若长度较大则说明阈值要靠多根小幅 bar 线性累加方达成(对应平缓波动,可继续观察)。该描述符与"最长不超出预算窗口"描述符天然配对——两者使用同一双指针模板,差别仅在循环改写为下界 >= 形式以及收缩步骤移到比较之前而非之后。

约束条件

  • 0 <= len(returns) <= 5000;每个元素为有限带符号浮点数,绝对值最高 1e6
  • abs_return_target 为严格大于零的有限浮点数,取值范围 (0, 1e9]
  • 阈值边界为闭——窗口绝对值之和恰好等于 `abs_return_target` 仍计入合规
  • 若不存在任何合规窗口(含空输入与全段绝对和未达阈值的情形),返回哨兵值 `-1`
  • 输出为整数长度,使用精确比对(不引入浮点容差)

样例

Case 1 · statement-example: signed returns first reach target at length 3

输入: [[0.005,-0.008,0.012,-0.004,0.006,-0.015,0.003,0.009],0.025]

期望: 3

逐位绝对值 [0.005,0.008,0.012,0.004,0.006,0.015,0.003,0.009],无单根达到 0.025;首个合规窗口 [0..2] 累计 0.025 恰好等阈值,长度 3。无长度 2 窗口合规。

Case 2 · statement-example: single dominant bar trivially yields length 1

输入: [[0.01,-0.02,5,0.03],0.5]

期望: 1

下标 2 处 |5.0|=5.0 单根已远超阈值 0.5,直接返回长度 1。

Case 3 · statement-example: total absolute sum below target

输入: [[0.01,-0.02,0.01,-0.01],1]

期望: -1

全段绝对和 = 0.05 < 阈值 1.0,无合规窗口,返回哨兵 -1。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: signed returns first reach target at length 3

输入: [[0.005,-0.008,0.012,-0.004,0.006,-0.015,0.003,0.009],0.025]

期望: 3

逐位绝对值 [0.005,0.008,0.012,0.004,0.006,0.015,0.003,0.009],无单根达到 0.025;首个合规窗口 [0..2] 累计 0.025 恰好等阈值,长度 3。无长度 2 窗口合规。

Case 2 · statement-example: single dominant bar trivially yields length 1

输入: [[0.01,-0.02,5,0.03],0.5]

期望: 1

下标 2 处 |5.0|=5.0 单根已远超阈值 0.5,直接返回长度 1。

Case 3 · statement-example: total absolute sum below target

输入: [[0.01,-0.02,0.01,-0.01],1]

期望: -1

全段绝对和 = 0.05 < 阈值 1.0,无合规窗口,返回哨兵 -1。