Day10.和可被K整除的子数组---LeeCode练习

题目再现

给定一个整数数组A,返回其中元素之和可被K整除的(连续,非空)子数组的数目。
本题目来自于此处

代码

class Solution:
    def subarraysDivByK(self, A: List[int], K: int) -> int:
        d={0:1}
        s,a=0,0
        for f in A:
            s+=f
            p=s%K
            q=d.get(p,0)
            a+=q
            d[p]=q+1
        
        return a

代码思想:
我们假设p[i]是前i个数字的和,这样我们计算(i,j)之间所有数字的值时,就可以直接用p[j]-p[i-1]。
这时,只需要求出:(p[j]-p[i-1])%K=0,根据同余定律,得到:p[j]%K=p[i-1]%K
根据上面的公式,我们只用在字典中存入前n个数字之和与K的余数
最开始设置的{0:1}时为了当前缀与K的余为0时

你可能感兴趣的:(Day10.和可被K整除的子数组---LeeCode练习)