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]

提示:

1A.length300001 \le A.length \le 30000
10000A[i]10000-10000 \le A[i] \le 10000
2K100002 \le K \le 10000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k

題解

對於求解區間和的整除問題,常用的就是用前綴和的取模來判斷即
pre[i]%K==pre[j]%Kpre[i] \% K == pre[j]\%K

因此在區間[i+1,j][i+1,j]內的和可以被KK整除。所以可以使用map來記錄前綴和的模值。但是由於2K100002\le K \le 10000,所以可以使用數組表示。

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 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章