Skip to content
ΣDSA Patterns
Menu
Language

Prefix Sum

Guide 2 of 6 · Path 2 of 6

Demo preview: These solutions pass the automated test suite but have not been human-reviewed. Treat trade-offs and prose as draft.

Continuous Subarray Sum

Problem (restated)

Return true if nums has a contiguous subarray of length ≥ 2 whose sum is a multiple of k.

Intuition

If two prefix sums share the same mod k, the between-sum is multiple of k; require index gap ≥ 2.

Approaches

Prefix mod map

Tested only
Time O(n)Space O(min(n,k))

Idea. Map remainder → earliest index. On repeat with j-i≥2, true.

Walkthrough. [23,2,4,6,7], k=6 → subarray [2,4] works.

Trade-offs. Careful with k=0 edge (not in constraints usually k>0).

Solution
export function checkSubarraySum(nums: number[], k: number): boolean {
  const seen = new Map<number, number>([[0, -1]]);
  let sum = 0;
  for (let i = 0; i < nums.length; i++) {
    sum += nums[i]!;
    const r = k === 0 ? sum : ((sum % k) + k) % k;
    if (seen.has(r)) { if (i - seen.get(r)! >= 2) return true; }
    else seen.set(r, i);
  }
  return false;
}
export function checkSubarraySum(nums: number[], k: number): boolean {
  const seen = new Map<number, number>([[0, -1]]);
  let sum = 0;
  for (let i = 0; i < nums.length; i++) {
    sum += nums[i]!;
    const r = k === 0 ? sum : ((sum % k) + k) % k;
    if (seen.has(r)) { if (i - seen.get(r)! >= 2) return true; }
    else seen.set(r, i);
  }
  return false;
}

Reflection