AlgoMooc

N0033. 20260603-统计盈利目标区间

中等

通过率 46% · 提交 13 · 通过 6

华为OD
算法机考高频题型改编 · 聚焦「华为OD」 · 难度:中等

某公司的财务流水系统重构为实时流处理架构。日盈利数据(可正可负)作为消息一条条实时推送。请设计一个实时监控模块,它接收两个序列:操作指令序列 ops 和对应的参数序列 vals。 1. 当 ops[i] == "add" 时:代表接收一条新的日盈利流数据,其值为 vals[i]。 2. 当 ops[i] == "query" 时:代表发起一次实时查询,目标值为 vals[i](即 target)。要求立刻返回:以当前最新到达的这笔流水为区间右端点,且区间总和恰好等于 target 的连续区间个数。

这类题属于算法机考高频题型中「华为OD」方向的高频题型,通常考察对「华为OD」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。

输入描述

- ops:字符串数组,表示操作指令序列。 - vals:整型数组,表示与 ops 一一对应的参数序列。对于 add 指令,代表盈利值;对于 query 指令,代表目标值 target。 1. ops 中仅包含 "add" 和 "query",ops.length <= 10^5 2. -10^4 <= values[i] <= 10^4 当操作作为 add 3. -10^9 <= values[i] <= 10^9 当操作作为 query 4. 用例的输入都是合法的

输出描述

返回一个整型数组,按照 query 指令出现的顺序,依次保存每次查询的结果,如果没有 query,返回空数组,如果 query 没有符合条件的区间,返回 0。

示例

示例 1

输入示例

5
add,add,query,add,query
1,2,3,3,6

输出示例

1,1
说明:- add 1:流为 [1] - add 2:流为 [1, 2] - query 3:最新数据是 2。以 2 结尾且和为 3 的区间只有 [1, 2],返回 1。 - add 3:流为 [1, 2, 3] - query 6:最新数据是 3。以 3 结尾且和为 6 的区间只有 [1, 2, 3],返回 1。

示例 2

输入示例

7
add,add,add,query,add,add,query
1,-1,0,0,1,-1,0

输出示例

2,3
说明:- 前三次 add 后,流为 [1, -1, 0]。 - 第一个 query 0:以最新元素 0 结尾,和为 0 的区间有 [0] 和 [1, -1, 0],返回 2。 - 后两次 add 后,流为 [1, -1, 0, 1, -1]。 - 第二个 query 0:以最新元素 -1 结尾,和为 0 的区间有 [1, -1]、[0, 1, -1]、[1, -1, 0, 1, -1],返回 3。

时间限制 1000 ms · 内存限制 256 MB