Skip to content
ΣDSA Patterns
Menu
Language

Prefix Sum

Guide 2 of 6 · Path 2 of 6

Interactive

Mental model

A worked animation for this problem. Scrub steps or press space to pause; re-tell the invariant out loud.

Step 1 of 6
23
2
4
6
7

need same prefix mod, gap ≥ 2

Subarray length ≥ 2 whose sum is a multiple of k=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

Unverified
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;
}

Template connection

Prefix sums modulo k; a repeated remainder means a subarray sum divisible by k (length ≥ 2).

Reflection