本文主要是介绍leetcode-974. 和可被 K 整除的子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给定一个整数数组 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, -3]
提示:
1 <= A.length <= 30000
-10000 <= A[i] <= 10000
2 <= K <= 10000
解题思路
前缀和的变形题,基本思路和和为K的子数组非常类似,区别在于,这次需要对和取模
代码
class Solution:def subarraysDivByK(self, A: List[int], K: int) -> int:pre_sum = {0: 1}cur_sum = 0cnt = 0for each_num in A:cur_sum = (each_num + cur_sum) % Kcnt += pre_sum.get((cur_sum - K) % K, 0)pre_sum[cur_sum] = pre_sum.get(cur_sum, 0) + 1return cnt
其实pre_sum.get((cur_sum - K) % K, 0)
这一句可以简化为:pre_sum.get(cur_sum, 0)
,因为-k,然后再%k,和什么都不做,其实在数学上没什么区别
这篇关于leetcode-974. 和可被 K 整除的子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!