最低增益门槛下的累积 PnL 报告期最长阶梯式子序列
Longest Stair-Stepping Subsequence Of Cumulative-PnL Reports Under A Minimum-Gain Gate
开始编码实现 solution(cumret: list[float], delta_min: float) -> int。给定一段长度为 N 的逐期累积 PnL 序列 cumret(cumret[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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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。