给定一个整数数组 A
,返回其中元素之和可被 K
整除的(连续、非空)子数组的数目。
PS:
1 <= A.length <= 30000
-10000 <= A[i] <= 10000
2 <= K <= 10000
一刷:
想到用前缀和,时间复杂度为O()
再利用hash优化前缀和,注意:(同余定理)给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。
跟之前这个和为K的子数组类似
class Solution:
def subarraysDivByK(self, A: List[int], K: int) -> int:
d = {0: 1}
presum = 0
count = 0
for i in A:
presum += i
if presum % K in d:
count += d[presum % K]
d[presum % K] += 1
else:
d[presum % K] = 1
return count