leetcode974. 和可被 K 整除的子数组
思路
使用前缀数组可以快速统计加和问题。然后基于题目,考虑是寻找整除的子集,换个说法,当前前缀的余数要与之前的某个余数一样,两前缀之差为合格子集。
除此外,额外统计前缀中本身就余数为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] = 1
else:
mapper[res] += 1
print(mapper)
count = 0
for k,v in mapper.items():
if k == 0:
count += v
count += v*(v-1)//2
return count