← 返回编程题库
coding-count-positive-flow-k-windows简单免费版2000ms未尝试

严格净流入的 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 < 1window > 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 可见样例;服务端提交会运行可见样例和隐藏测试。

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

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

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。