Back to all solutions

#2964 - Number of Divisible Triplet Sums

Problem Description

Given a 0-indexed integer array nums and an integer d, return the number of triplets (i, j, k) such that i < j < k and (nums[i] + nums[j] + nums[k]) % d == 0.

Solution

/**
 * @param {number[]} nums
 * @param {number} d
 * @return {number}
 */
var divisibleTripletCount = function(nums, d) {
  const n = nums.length;
  const pairSums = new Map();

  for (let i = 0; i < n - 1; i++) {
    for (let j = i + 1; j < n; j++) {
      const sumMod = (nums[i] + nums[j]) % d;
      if (!pairSums.has(sumMod)) {
        pairSums.set(sumMod, []);
      }
      pairSums.get(sumMod).push([i, j]);
    }
  }

  let result = 0;
  for (let k = 0; k < n; k++) {
    const targetKey = (d - nums[k] % d) % d;
    if (pairSums.has(targetKey)) {
      for (const [i, j] of pairSums.get(targetKey)) {
        if (j < k) {
          result++;
        }
      }
    }
  }

  return result;
};