← 返回编程题库
coding-longest-stairstep-cumret-with-min-gap中等免费版2000ms未尝试

最低增益门槛下的累积 PnL 报告期最长阶梯式子序列

Longest Stair-Stepping Subsequence Of Cumulative-PnL Reports Under A Minimum-Gain Gate

开始编码

实现 solution(cumret: list[float], delta_min: float) -> int。给定一段长度为 N 的逐期累积 PnL 序列 cumretcumret[i] 是截至第 i 个报告期的累积 PnL,可能上行、下行或回访同一水平)以及一个非负的最低增益门槛 delta_min,返回最长阶梯式索引子序列的长度——即 i_1 < i_2 < ... < i_K 使得每对相邻选点满足 cumret[i_{k+1}] - cumret[i_k] >= delta_min。所选索引构成一个子序列(升序索引即可,不必连续),不是连续窗口。任何非空输入的单点链恒合法。

例:solution([0.0, 1.0, 0.5, 2.0, 1.5, 3.0], 1.0) 返回 4。研究员选索引 0, 1, 3, 5,对应 cumret 值 0.0, 1.0, 2.0, 3.0,每步增量恰为 1.0,等于 delta_min,每一跳都合法。该 delta 下不存在五元链,因为中间索引 2 处的 0.5 和索引 4 处的 1.5 无法作为某个严格 1.0-跨度跳点的"攀升前驱"——它们被最低增益门槛过滤掉。当 delta_min = 2 时最长链长度为 2(如 0.0 -> 2.0 或 0.0 -> 3.0);该数组在更宽门槛下爬升不够快,支撑不起三元链。

delta_min 把教科书"最长非降子序列"参数化推广。当 delta_min == 0 时本题退化为最长非降子序列(取等也算合法跳点)。当 delta_min > 0 时等值或近等值 cumret 不再是合法跳点,问题严格变难;等值回访、平台期、微小正向位移都会被过滤掉,只剩"实质性进展"贡献链长。骨架见 stubs/stub.py

实践背景

研究员的策略 tear-sheet 通常会附带一项"阶梯过滤"指标,刻画策略累积 PnL 在多少个连续选点上每次都至少抬升某条最低增益线相对前一选点——以此过滤掉平台回访和噪声水平的微小波动,只保留实质性进展。delta_min 是该过滤器的调节旋钮:取 delta_min == 0 时所有非降回访都计入(最宽松设置,回答"策略是否曾停止上行"这类问题),delta_min > 0 时门槛要求每跳都跨越一条可验证的最小改进线(适合在手续费预算、基准漂移率或风险底线必须每次都被打穿的研究语境)。输出值随后与回撤深度、Sharpe 等并列写进标准化 tear-sheet——给定 delta_min 下一段更长的阶梯链是策略累积稳健(而非靠短期尖峰拉动)的一个旁证。

约束条件

  • 0 <= N <= 1500,其中 N 为 solution(cumret, delta_min) 的 cumret 入参长度
  • 每个 cumret[i] 为有限带符号浮点数,|cumret[i]| <= 1e6(允许上行、下行或回访同值)
  • delta_min 为有限非负浮点数,0 <= delta_min <= 1e6;比较运算符为**大于或等于**(cumret[i] - cumret[j] 恰好等于 delta_min 的跳点**计入**);当 delta_min == 0 时本题退化为最长非降子序列
  • 空输入返回 0;任何非空输入恒可取长度 1 的答案(单点回退)
  • 输出为整数长度,使用精确比对(不引入浮点容差)

样例

Case 1 · statement-example: basic stair-step picks length 4

输入: [[0,1,0.5,2,1.5,3],1]

期望: 4

选取索引 0,1,3,5 对应 cumret 0.0,1.0,2.0,3.0,每步增量恰为 1.0 等于 delta_min,长度 4。

Case 2 · statement-example: delta=0 allows non-decreasing (equal repeats)

输入: [[1,1,1,1],0]

期望: 4

delta_min=0 时退化为最长非降子序列,相等也算合法,全数组长度 4。

Case 3 · statement-example: empty input returns 0

输入: [[],0]

期望: 0

空 cumret 没有任何选点,返回 0。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: basic stair-step picks length 4

输入: [[0,1,0.5,2,1.5,3],1]

期望: 4

选取索引 0,1,3,5 对应 cumret 0.0,1.0,2.0,3.0,每步增量恰为 1.0 等于 delta_min,长度 4。

Case 2 · statement-example: delta=0 allows non-decreasing (equal repeats)

输入: [[1,1,1,1],0]

期望: 4

delta_min=0 时退化为最长非降子序列,相等也算合法,全数组长度 4。

Case 3 · statement-example: empty input returns 0

输入: [[],0]

期望: 0

空 cumret 没有任何选点,返回 0。