974. Subarray Sums Divisible by K

https://leetcode.com/problems/subarray-sums-divisible-by-k/

Given an array A of integers, return the number of (contiguous, non-empty) subarrays that have a sum divisible by K.

 

Example 1:

Input: A = [4,5,0,-2,-3,1], K = 5
Output: 7
Explanation: There are 7 subarrays with a sum divisible by K = 5:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

 

Note:

  1. 1 <= A.length <= 30000
  2. -10000 <= A[i] <= 10000
  3. 2 <= K <= 10000
---

class Solution {
public int subarraysDivByK(int[] A, int K) {
int ans = 0, prefix = 0;
int[] count = new int[K];
// If first element is multiple of K, count = 1
count[0] = 1;
for (int num: A) {
prefix = (prefix + num % K + K) % K;
ans += count[prefix]++;
}
return ans;
}
}