文章目录
题目
代码(8.3 首刷看解析 GO)
(preSum[j+1]-preSum[i]) % k=0
, 根据分配率得preSum[j+1] % k = preSum[i] % k
,说明我们哈希表要存储的是余数。同样的,一开始余数为0的个数为1。
且由于答案求的是个数,所以我们就将哈希表的value值记作个数。一般答案求什么,value就是什么
func subarraysDivByK(nums []int, k int) int {
pre, res := 0, 0
mp := map[int]int{0:1}
for _, v := range(nums) {
pre += v
left := (pre % k + k) % k // 负数的余数不一样
if _, ok := mp[left]; ok {
res += mp[left]
}
mp[left]++
}
return res;
}