Skip to content

974. Subarray Sums Divisible by K

Description

Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k.

A subarray is a contiguous part of an array.

 

Example 1:

Input: nums = [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]

Example 2:

Input: nums = [5], k = 9
Output: 0

 

Constraints:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • 2 <= k <= 104

 

Solutions

Solution: Hash Map

  • Time complexity: O(n)
  • Space complexity: O(n)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
const subarraysDivByK = function (nums, k) {
  const remainderMap = new Map([[0, 1]]);
  let current = 0;
  let result = 0;

  for (const num of nums) {
    current = (current + (num % k) + k) % k;
    const count = remainderMap.get(current) ?? 0;

    result += count;
    remainderMap.set(current, count + 1);
  }
  return result;
};

Released under the MIT license