#974
Medium
前缀和

Subarray Sums Divisible by K

统计和可以被 k 整除的子数组个数。

ArrayPrefix Sum

题目定位

两个前缀的模值相同时,它们之间的区间和就能被 k 整除。

关键观察

这里统计的不是前缀和值本身,而是前缀和的模值类别。

目标复杂度

O(n) / O(k)

这题的解法思路怎么拆

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

误以为要找 currentPrefix - k,而不是同模类。

高频追问

为什么模值相同就意味着区间和可整除?

它和和为 k 的子数组有什么根本区别?

继续刷相关题

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

view_week回到模式页
LeetCode 974. Subarray Sums Divisible by K 题解思路 | Interview AiBox