「Leetcode」974. Subarray Sums Divisible by K(Java)
阿新 • • 發佈:2019-01-14
分析
這題場上字首和都想出來了,然後就沒有然後了。。。哭惹.jpg
字首和相減能夠得到任意一段連續區間的和,然後他們取餘\(K\)看餘數是否為0就能得到。這是樸素的遍歷演算法。那麼反過來說,如果兩個字首和都對\(K\)餘\(p\),那麼他們相減一定能夠被K整除。
我們就這麼統計就可以了,然後一個簡單的求和即可。想到不難,難的是想到。
程式碼
class Solution { public int subarraysDivByK(int[] A, int K) { int[] prefix = new int[A.length+1]; for(int i=0; i<A.length; ++i) { prefix[i+1] = prefix[i] + A[i]; } int[] cnt = new int[K]; for(int p: prefix) { cnt[(p%K+K)%K]++; } int ans=0; for(int c: cnt) { ans += c*(c-1)/2; } return ans; } }