报价更新时间流上的"陈旧期后首次更新"标记
First-Update-After-Stale-Period Flags on a Quote-Update Timestamp Stream
开始编码实现 solution(times: list[float], stale_W: float) -> list[int]。某行情数据源发布报价更新的时间戳序列 times(单位为秒,自交易日开盘起算,单调非减)。给定一个严格为正的陈旧阈值 stale_W,对每个索引 i 返回间隙 times[i] - times[i-1] 是否 严格 大于 stale_W —— 是则返回 1(该笔更新是"陈旧期后的第一笔"),否则返回 0。i = 0 时不存在前驱,按约定返回 1(流的起点视作未定先验陈旧期的结束,下游价格复核需在此触发)。边界情形 times[i] - times[i-1] == stale_W 恰好等于阈值时不被标记(不等式为严格的 >,而非 >=)。
stale_W 期望为严格大于 0 的有限浮点数。若 stale_W <= 0(或为 NaN / 非有限值),函数返回长度为 N 的全 1 哨兵列表,绝不抛出异常——非正的陈旧窗口没有有意义的语义,对一个新鲜度监视器来说,把每一笔都置为待复核是更安全的方向。
例
solution([0.0, 0.5, 1.0, 3.5, 3.5, 4.0, 10.0], 1.0) 返回 [1, 0, 0, 1, 0, 0, 1]。索引 0 由哨兵约定置 1。到索引 1 的间隙为 0.5 ≤ 1.0 → 0。到索引 2 的间隙为 0.5 ≤ 1.0 → 0。到索引 3 的间隙为 2.5 > 1.0 → 1(沉默 2.5 秒后的首笔更新)。到索引 4 的间隙为 0.0(零间隙,相等时间戳)≤ 1.0 → 0。到索引 5 的间隙为 0.5 ≤ 1.0 → 0。到索引 6 的间隙为 6.0 > 1.0 → 1。
solution([0.0, 1.0, 2.0, 3.0], 1.0) 中所有内部间隙恰好等于 stale_W。在 严格 > 下答案为 [1, 0, 0, 0] —— 边界间隙不被标记。若误用 >= 则会得到 [1, 1, 1, 1],触发"复核风暴",这正是本题主要防守的变异点。空输入返回 []。非法阈值如 solution([0.1, 0.2, 0.3], -1.0) 返回 [1, 1, 1]。函数骨架见 stubs/stub.py。
实践背景
实时行情新鲜度监视器会逐 instrument 监控相邻报价更新之间的间隙。当间隙超过按品种调好的阈值(典型流动品种几十毫秒,冷门品种几秒),紧接的下一笔更新被视作"陈旧期后的首次报价":下游价格复核逻辑必须用最新成交校验新中价,并重置缓存中的价差,因为先前的价位可能已经远离真实订单簿。把这个判断编码为与 tick 流对齐的 0/1 标记,能让监视器与已经消费 times 的向量化盘后分析共用同一条流水线——无需额外的定时器线程,一次查表即可。严格 vs 非严格的取舍并非细节:在一条节奏精确为阈值的报价流上,使用 >= 会把每一笔合法更新都标为陈旧,把复核路径整个泛洪。
约束条件
- 0 <= len(times) <= 200000;每个元素为有限非负浮点数,单位为秒。列表单调非减;相等时间戳(零间隙)合法且除了索引 0 哨兵外永不被标记
- stale_W 期望为严格大于 0 的有限浮点数;典型量级为 1e-3 到 60 秒。若 stale_W <= 0(或为 NaN / 非有限值),函数返回长度为 N 的全 1 哨兵列表——**绝不抛出异常**
- 标记规则使用 **严格** 不等式 `times[i] - times[i-1] > stale_W`;间隙恰好等于 `stale_W` 时**不**标记
- 索引 0 始终返回 1(哨兵:首次观测无前驱,视作未定的先验陈旧期结束)。空输入返回 `[]`
- 输出为长度 N、与输入下标对齐的 `int` 列表,取值在 `{0, 1}` 之中;比对方式为整数精确比对,对答案不引入任何浮点容差
样例
Case 1 · statement-example: seven-tick stream W=1.0 with batch + long gap
输入: [[0,0.5,1,3.5,3.5,4,10],1]
期望: [1,0,0,1,0,0,1]
索引 0 由哨兵约定置 1;间隙 0.5、0.5 不超过阈值故为 0;间隙 2.5 严格大于 1.0 故为 1;零间隙(相等时间戳)不超过阈值为 0;间隙 0.5 为 0;间隙 6.0 严格大于 1.0 为 1。
Case 2 · statement-example: uniform spacing exactly equal to stale_W (strict-> guard)
输入: [[0,1,2,3],1]
期望: [1,0,0,0]
所有内部间隙恰好等于阈值 1.0;严格 > 下不应被标记,故除索引 0 哨兵外全 0。该用例守护 `>=` 变异。
Case 3 · typical: mixed gaps with one clear stale jump
输入: [[0.1,0.2,0.5,0.8,5,5.1,5.2],0.5]
期望: [1,0,0,0,1,0,0]
索引 0 哨兵;间隙 0.1, 0.3, 0.3 都不超 0.5 故 0;间隙 4.2 严格大于 0.5 故 1;后续 0.1, 0.1 故 0。
Case 4 · typical: increasing gaps, each crosses a different threshold
输入: [[0,0.1,0.3,0.7,1.5,3.1,6.3],1]
期望: [1,0,0,0,0,1,1]
间隙序列 0.1, 0.2, 0.4, 0.8, 1.6, 3.2;前四个 ≤ 1.0 不标记,后两个严格大于 1.0 故标记。
Case 5 · typical: dense quote storm followed by extended silence
输入: [[0,0.001,0.002,0.003,0.004,0.005,1.5,1.501,1.502],0.05]
期望: [1,0,0,0,0,0,1,0,0]
前 6 笔间隙 0.001 远小于 0.05;间隙 1.495 严格大于阈值故标记;最后两笔间隙 0.001 不标记。
Case 6 · typical: repeated equal-to-threshold gaps interspersed with one larger
输入: [[0,2,4,4.000001,6.000001],2]
期望: [1,0,0,0,0]
间隙 2.0、2.0 恰好等于阈值不标记;间隙 0.000001 远小于阈值不标记;间隙 2.0 也恰好等于阈值不标记;最终除索引 0 外全 0。
Case 7 · typical: just-above-threshold gap by 1e-9
输入: [[0,0.500000001],0.5]
期望: [1,1]
唯一间隙比阈值大 1e-9,严格 > 故标记。
Case 8 · typical: just-below-threshold gap by 1e-9
输入: [[0,0.499999999],0.5]
期望: [1,0]
唯一间隙比阈值小 1e-9,不严格大于阈值故不标记。
Case 9 · boundary: empty input
输入: [[],1]
期望: []
空输入直接返回空列表。
Case 10 · boundary: single-element input always returns [1]
输入: [[3.14],0.5]
期望: [1]
单个元素仅触发哨兵,输出 [1]。
Case 11 · boundary: single-element input with very large stale_W still returns [1]
输入: [[100],1000000000]
期望: [1]
无论阈值多大,单元素仍因哨兵约定返回 [1]。
Case 12 · boundary: all-equal timestamps (zero gaps) -> only sentinel flags
输入: [[5,5,5,5,5],0.001]
期望: [1,0,0,0,0]
所有间隙为 0,零间隙不超过任何正阈值故不标记;仅索引 0 哨兵为 1。
Case 13 · boundary: invalid stale_W = 0 returns all 1s sentinel
输入: [[0.1,0.2,0.3,0.4],0]
期望: [1,1,1,1]
stale_W = 0 不为正,返回长度 4 的全 1 哨兵;不抛出异常。
Case 14 · boundary: invalid stale_W < 0 returns all 1s sentinel
输入: [[0,0.1,0.2],-1]
期望: [1,1,1]
stale_W < 0 非法,返回全 1 哨兵;不抛出异常。
Case 15 · boundary: invalid stale_W = NaN returns all 1s sentinel
输入: [[0,0.1,0.2,0.3,0.4],"NaN"]
期望: [1,1,1,1,1]
NaN 非有限值,返回全 1 哨兵;不抛出异常。
Case 16 · boundary: invalid stale_W = -inf returns all 1s sentinel
输入: [[1,2,3],"-Infinity"]
期望: [1,1,1]
-inf 非正,返回全 1 哨兵。
Case 17 · boundary: empty input with invalid stale_W still returns []
输入: [[],-5]
期望: []
空输入即便阈值非法也直接返回空列表。
Case 18 · boundary: two ticks with gap exactly at threshold -> [1, 0]
输入: [[10,10.5],0.5]
期望: [1,0]
唯一间隙恰好等于阈值,严格 > 不成立,不标记;输出 [1, 0]。
Case 19 · boundary: two ticks with gap just above threshold -> [1, 1]
输入: [[10,10.500000000001],0.5]
期望: [1,1]
唯一间隙仅比阈值大 1e-12,严格 > 成立,标记;输出 [1, 1]。
Case 20 · boundary: very large stale_W -> never flags after sentinel
输入: [[0,1,2,3,4,5],1000000]
期望: [1,0,0,0,0,0]
所有间隙远小于巨大阈值,除哨兵外全 0。
Case 21 · boundary: very small positive stale_W catches every micro-gap
输入: [[0,1e-9,2e-9,0.001],1e-12]
期望: [1,1,1,1]
极小正阈值;所有间隙都严格大于它故全 1。
Case 22 · adversarial: alternating just-above and just-below gaps
输入: [[0,1.0001,2,3.0001,4,5.0001],1]
期望: [1,1,0,1,0,1]
间隙交替 1.0001、0.9999、1.0001、0.9999、1.0001;严格 > 1.0 时奇数位置标记,偶数不标记。
Case 23 · adversarial: long batch of equal-timestamps then a gap
输入: [[1,1,1,1,1,1,1,1,1.5],0.4]
期望: [1,0,0,0,0,0,0,0,1]
前 8 笔均为 1.0 的批次,零间隙不标记;最后一笔间隙 0.5 严格大于 0.4 故标记。
Case 24 · adversarial: gap exactly equals stale_W via float arithmetic
输入: [[0,0.30000000000000004],0.30000000000000004]
期望: [1,0]
通过浮点算术使间隙与阈值二进制完全相等,严格 > 不成立,不标记。
Case 25 · adversarial: monotonically non-decreasing with a single zero-gap pair near a stale jump
输入: [[0,0,5,5,5.5],0.5]
期望: [1,0,1,0,0]
索引 0 哨兵;零间隙不标记;间隙 5.0 严格大于 0.5 标记;零间隙不标记;间隙 0.5 恰等于阈值不标记。
Case 26 · adversarial: gap is +inf-ish (very large) far above threshold
输入: [[0,1000000000000000],1]
期望: [1,1]
1e15 远大于 1.0,严格 > 成立,索引 1 标记。
Case 27 · adversarial: invalid stale_W = +inf returns all 1s sentinel
输入: [[0,0.5,1,2,5],"Infinity"]
期望: [1,1,1,1,1]
+inf 非有限值,依据合约返回全 1 哨兵;不抛出异常。该用例锁定非有限阈值的门控逻辑。
Case 28 · adversarial: descending hand-counted boundaries near threshold
输入: [[0,0.999999,1.999999,3,4,5.000001],1]
期望: [1,0,0,1,0,1]
间隙 0.999999、1.000000、1.000001、1.000000、1.000001;严格 > 1.0 仅在第三和第五个为真。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: seven-tick stream W=1.0 with batch + long gap
输入: [[0,0.5,1,3.5,3.5,4,10],1]
期望: [1,0,0,1,0,0,1]
索引 0 由哨兵约定置 1;间隙 0.5、0.5 不超过阈值故为 0;间隙 2.5 严格大于 1.0 故为 1;零间隙(相等时间戳)不超过阈值为 0;间隙 0.5 为 0;间隙 6.0 严格大于 1.0 为 1。
Case 2 · statement-example: uniform spacing exactly equal to stale_W (strict-> guard)
输入: [[0,1,2,3],1]
期望: [1,0,0,0]
所有内部间隙恰好等于阈值 1.0;严格 > 下不应被标记,故除索引 0 哨兵外全 0。该用例守护 `>=` 变异。
Case 3 · typical: mixed gaps with one clear stale jump
输入: [[0.1,0.2,0.5,0.8,5,5.1,5.2],0.5]
期望: [1,0,0,0,1,0,0]
索引 0 哨兵;间隙 0.1, 0.3, 0.3 都不超 0.5 故 0;间隙 4.2 严格大于 0.5 故 1;后续 0.1, 0.1 故 0。
Case 4 · typical: increasing gaps, each crosses a different threshold
输入: [[0,0.1,0.3,0.7,1.5,3.1,6.3],1]
期望: [1,0,0,0,0,1,1]
间隙序列 0.1, 0.2, 0.4, 0.8, 1.6, 3.2;前四个 ≤ 1.0 不标记,后两个严格大于 1.0 故标记。
Case 5 · typical: dense quote storm followed by extended silence
输入: [[0,0.001,0.002,0.003,0.004,0.005,1.5,1.501,1.502],0.05]
期望: [1,0,0,0,0,0,1,0,0]
前 6 笔间隙 0.001 远小于 0.05;间隙 1.495 严格大于阈值故标记;最后两笔间隙 0.001 不标记。
Case 6 · typical: repeated equal-to-threshold gaps interspersed with one larger
输入: [[0,2,4,4.000001,6.000001],2]
期望: [1,0,0,0,0]
间隙 2.0、2.0 恰好等于阈值不标记;间隙 0.000001 远小于阈值不标记;间隙 2.0 也恰好等于阈值不标记;最终除索引 0 外全 0。
Case 7 · typical: just-above-threshold gap by 1e-9
输入: [[0,0.500000001],0.5]
期望: [1,1]
唯一间隙比阈值大 1e-9,严格 > 故标记。
Case 8 · typical: just-below-threshold gap by 1e-9
输入: [[0,0.499999999],0.5]
期望: [1,0]
唯一间隙比阈值小 1e-9,不严格大于阈值故不标记。
Case 9 · boundary: empty input
输入: [[],1]
期望: []
空输入直接返回空列表。
Case 10 · boundary: single-element input always returns [1]
输入: [[3.14],0.5]
期望: [1]
单个元素仅触发哨兵,输出 [1]。
Case 11 · boundary: single-element input with very large stale_W still returns [1]
输入: [[100],1000000000]
期望: [1]
无论阈值多大,单元素仍因哨兵约定返回 [1]。
Case 12 · boundary: all-equal timestamps (zero gaps) -> only sentinel flags
输入: [[5,5,5,5,5],0.001]
期望: [1,0,0,0,0]
所有间隙为 0,零间隙不超过任何正阈值故不标记;仅索引 0 哨兵为 1。
Case 13 · boundary: invalid stale_W = 0 returns all 1s sentinel
输入: [[0.1,0.2,0.3,0.4],0]
期望: [1,1,1,1]
stale_W = 0 不为正,返回长度 4 的全 1 哨兵;不抛出异常。
Case 14 · boundary: invalid stale_W < 0 returns all 1s sentinel
输入: [[0,0.1,0.2],-1]
期望: [1,1,1]
stale_W < 0 非法,返回全 1 哨兵;不抛出异常。
Case 15 · boundary: invalid stale_W = NaN returns all 1s sentinel
输入: [[0,0.1,0.2,0.3,0.4],"NaN"]
期望: [1,1,1,1,1]
NaN 非有限值,返回全 1 哨兵;不抛出异常。
Case 16 · boundary: invalid stale_W = -inf returns all 1s sentinel
输入: [[1,2,3],"-Infinity"]
期望: [1,1,1]
-inf 非正,返回全 1 哨兵。
Case 17 · boundary: empty input with invalid stale_W still returns []
输入: [[],-5]
期望: []
空输入即便阈值非法也直接返回空列表。
Case 18 · boundary: two ticks with gap exactly at threshold -> [1, 0]
输入: [[10,10.5],0.5]
期望: [1,0]
唯一间隙恰好等于阈值,严格 > 不成立,不标记;输出 [1, 0]。
Case 19 · boundary: two ticks with gap just above threshold -> [1, 1]
输入: [[10,10.500000000001],0.5]
期望: [1,1]
唯一间隙仅比阈值大 1e-12,严格 > 成立,标记;输出 [1, 1]。
Case 20 · boundary: very large stale_W -> never flags after sentinel
输入: [[0,1,2,3,4,5],1000000]
期望: [1,0,0,0,0,0]
所有间隙远小于巨大阈值,除哨兵外全 0。
Case 21 · boundary: very small positive stale_W catches every micro-gap
输入: [[0,1e-9,2e-9,0.001],1e-12]
期望: [1,1,1,1]
极小正阈值;所有间隙都严格大于它故全 1。
Case 22 · adversarial: alternating just-above and just-below gaps
输入: [[0,1.0001,2,3.0001,4,5.0001],1]
期望: [1,1,0,1,0,1]
间隙交替 1.0001、0.9999、1.0001、0.9999、1.0001;严格 > 1.0 时奇数位置标记,偶数不标记。
Case 23 · adversarial: long batch of equal-timestamps then a gap
输入: [[1,1,1,1,1,1,1,1,1.5],0.4]
期望: [1,0,0,0,0,0,0,0,1]
前 8 笔均为 1.0 的批次,零间隙不标记;最后一笔间隙 0.5 严格大于 0.4 故标记。
Case 24 · adversarial: gap exactly equals stale_W via float arithmetic
输入: [[0,0.30000000000000004],0.30000000000000004]
期望: [1,0]
通过浮点算术使间隙与阈值二进制完全相等,严格 > 不成立,不标记。
Case 25 · adversarial: monotonically non-decreasing with a single zero-gap pair near a stale jump
输入: [[0,0,5,5,5.5],0.5]
期望: [1,0,1,0,0]
索引 0 哨兵;零间隙不标记;间隙 5.0 严格大于 0.5 标记;零间隙不标记;间隙 0.5 恰等于阈值不标记。
Case 26 · adversarial: gap is +inf-ish (very large) far above threshold
输入: [[0,1000000000000000],1]
期望: [1,1]
1e15 远大于 1.0,严格 > 成立,索引 1 标记。
Case 27 · adversarial: invalid stale_W = +inf returns all 1s sentinel
输入: [[0,0.5,1,2,5],"Infinity"]
期望: [1,1,1,1,1]
+inf 非有限值,依据合约返回全 1 哨兵;不抛出异常。该用例锁定非有限阈值的门控逻辑。
Case 28 · adversarial: descending hand-counted boundaries near threshold
输入: [[0,0.999999,1.999999,3,4,5.000001],1]
期望: [1,0,0,1,0,1]
间隙 0.999999、1.000000、1.000001、1.000000、1.000001;严格 > 1.0 仅在第三和第五个为真。