题目定位
两个前缀的模值相同时,它们之间的区间和就能被 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 的子数组有什么根本区别?
继续刷相关题
先把 前缀和 这个模式刷成体系,再去做更难变体。