题目定位
子数组和可以写成两个前缀的差,因此题目等价于:当前前缀和减去 k 的值之前出现过多少次?
关键观察
哈希表里存的是过去前缀和的出现次数,而不是区间本身。
目标复杂度
O(n) / O(n)
这题的解法思路怎么拆
1
子数组和可以写成两个前缀的差,因此题目等价于:当前前缀和减去 k 的值之前出现过多少次?
2
哈希表里存的是过去前缀和的出现次数,而不是区间本身。
3
先定义累计状态代表什么。
4
一趟扫描构造前缀。
参考实现
Python# Generic pattern template
prefix = [0] * (len(nums) + 1)
for i, value in enumerate(nums):
prefix[i + 1] = prefix[i] + value
range_sum = prefix[r + 1] - prefix[l]
常见坑点
warning
先更新当前前缀和次数,再去查询,导致多算。
warning
数组里有负数时却误用滑动窗口。
高频追问
为什么有负数时滑窗会失效?
如果题目变成整除或模值条件,该怎么扩展?
继续刷相关题
先把 前缀和 这个模式刷成体系,再去做更难变体。