#560
Medium
前缀和

Subarray Sum Equals K

统计和为 k 的子数组个数。

ArrayPrefix Sum

题目定位

子数组和可以写成两个前缀的差,因此题目等价于:当前前缀和减去 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

数组里有负数时却误用滑动窗口。

高频追问

为什么有负数时滑窗会失效?

如果题目变成整除或模值条件,该怎么扩展?

继续刷相关题

先把 前缀和 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 560. Subarray Sum Equals K 题解思路 | Interview AiBox