严格净流入的 K 期窗口计数
Count of Strictly-Positive Net-Inflow K-Period Windows
开始编码实现 solution(flows: list[int], window: int) -> int。给定一段长度为 N 的逐期有符号净流量序列 flows 与定长窗口 window(满足 1 <= window <= N),返回 flows 中所有长度为 window 的连续子窗口中,求和严格大于零的窗口的整数数量。正值表示该期净流入,负值表示净流出,零表示无净变化。求和恰好为 0 的窗口不计入。若 window < 1 或 window > N,则返回哨兵值 -1。
例
solution([3, -1, -2, 4, 0, 1, -5], 3) 返回 3。共有 5 个长度为 3 的连续窗口,求和分别为 0, 1, 2, 5, -4。其中三个求和严格为正(1, 2, 5),所以计数为 3。首窗口 [3, -1, -2] 求和恰好为 0,按严格规则不计入。
函数骨架见 stubs/stub.py。
实践背景
某交易台的逐期净现金流监控经常会提出一个最朴素的市态问题:今天 N 个周期里,共有多少个长度为 window 的切片表现为严格净流入?答案是一种粗糙但好用的聚集信号——即便全日总流量净额为 0,其中也可能埋藏着若干周期持续净流入的 K 期窗口;把这些窗口数出来就能把"持续净流入段"与"对冲性来回"区分开。风险看板会把这个计数与当日总流量并排显示,以便在交易台察觉之前提示市态切换。考虑到逐期序列可能较长而看板刷新很频繁,标准做法是保持一个 O(1) 更新的滚动窗口求和,而不是每次重算整段切片。
约束条件
- 1 <= N <= 5000,其中 N = len(flows);每个元素为有符号整数,绝对值不超过 1e6
- K 为整数;当 K < 1 或 K > N 时函数返回哨兵值 -1
- 严格正性:窗口求和严格大于 0 才计入 1;恰好等于 0 的窗口计入 0
- 输出为长度为 K 的连续子窗口中求和严格为正者的整数数量(若 K 退化则为 -1)
- 滚动求和在 64 位有符号整数范围内安全;上述边界下不会溢出
样例
Case 1 · statement-example: mixed signs with one zero-sum window excluded
输入: [[3,-1,-2,4,0,1,-5],3]
期望: 3
窗口求和为 [0, 1, 2, 5, -4],严格正者三个:1、2、5。第一个窗口 [3, -1, -2] 求和恰好为 0,不计入。
Case 2 · statement-example: window equals length, single output
输入: [[2,-1,4,-3],4]
期望: 1
N == K,唯一窗口求和为 2 严格大于零,因此返回 1。
Case 3 · statement-example: degenerate K returns sentinel -1
输入: [[1,2,3],4]
期望: -1
K = 4 大于 N = 3,触发哨兵:返回 -1。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: mixed signs with one zero-sum window excluded
输入: [[3,-1,-2,4,0,1,-5],3]
期望: 3
窗口求和为 [0, 1, 2, 5, -4],严格正者三个:1、2、5。第一个窗口 [3, -1, -2] 求和恰好为 0,不计入。
Case 2 · statement-example: window equals length, single output
输入: [[2,-1,4,-3],4]
期望: 1
N == K,唯一窗口求和为 2 严格大于零,因此返回 1。
Case 3 · statement-example: degenerate K returns sentinel -1
输入: [[1,2,3],4]
期望: -1
K = 4 大于 N = 3,触发哨兵:返回 -1。