思路
使用前缀数组可以快速统计加和问题。然后基于题目,考虑是寻找整除的子集,换个说法,当前前缀的余数要与之前的某个余数一样,两前缀之差为合格子集。
除此外,额外统计前缀中本身就余数为0的子集数量。
class Solution:def subarraysDivByK(self, nums: List[int], k: int) -> int:s = 0 mapper = {}for i in range(len(nums)):s += nums[i]res = s % k if res not in mapper:mapper[res] = 1else:mapper[res] += 1print(mapper)count = 0for k,v in mapper.items():if k == 0:count += vcount += v*(v-1)//2return count