给定整数数组a,返回元素之和可被k整除(连续、非空)的子数组数。
示例:
输入: a=[ 4,5,0,-2,- 3,1 ],K=5
输出: 7
说明:
有7个子数组,元素之和可以被K=5整除。
[ 4,5,0,-2,- 3,1 ],[5],[ 5,0 ],[ 5,0,-2,-3],[0],[0,-2,-3],[-2,]
提示:
1=a.length=30000-10000=a [ I ]=100002=k=10000的思路:
(presum[j] - presum[i] ) k=0-presum[j]%m=presum[I]%m,即满足同余定理a=b(modm )。
key用于在去掉前缀和馀数后存储相同馀数的个数。 计算以各要素nums[j]结束、与nums[j]之前的前缀的馀数remainder,key为remiander的value值为以nums[j]结束的能被整除的子数组的个数。
代码:
class solution 3360 defsubarraysdivbyk (self,nums: List[int], k : int (-int : pre sum=0sum _=dict ) sum _ [0]=1CNT=0foriinrange (len (nums ) ) 3360presum=nums ) )