給定一個整數數組 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]
提示:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k
題解
對於求解區間和的整除問題,常用的就是用前綴和的取模來判斷即
因此在區間內的和可以被整除。所以可以使用map來記錄前綴和的模值。但是由於,所以可以使用數組表示。
func subarraysDivByK(A []int, K int) int {
n := len(A)
sum := 0
ans := 0
mp := make([]int,K)
mp[0] = 1
for i :=0;i<n;i++{
sum = ((sum +A[i])%K+K)%K
ans += mp[sum]
mp[sum] += 1
}
return ans
}