Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources
Subarray Sum Equals K

Subarray Sum Equals K

Problem Statement

You’re a sum seeker with an array of integers and a target k. How many contiguous subarrays sum to k? This medium-level hashing challenge is a prefix-sum party—use a map to tally those matches!

Example

Input: nums = [1, 1, 1], k = 2

Output: 2 ([1,1], [1,1])

Input: nums = [1, 2, 3], k = 3

Output: 2 ([1,2], [3])

Input: nums = [1, -1, 0], k = 0

Output: 3 ([1,-1], [1,-1,0], [0])

Code

Java
Python
JavaScript
public class Solution {
    public int subarraySum(int[] nums, int k) {
        Map sumFreq = new HashMap<>();
        sumFreq.put(0, 1); // Empty subarray
        int sum = 0, count = 0;
        for (int num : nums) {
            sum += num;
            count += sumFreq.getOrDefault(sum - k, 0);
            sumFreq.put(sum, sumFreq.getOrDefault(sum, 0) + 1);
        }
        return count;
    }
}
            
from collections import defaultdict
def subarray_sum(nums, k):
    sum_freq = defaultdict(int)
    sum_freq[0] = 1
    curr_sum, count = 0, 0
    for num in nums:
        curr_sum += num
        count += sum_freq[curr_sum - k]
        sum_freq[curr_sum] += 1
    return count
            
function subarraySum(nums, k) {
    let sumFreq = new Map([[0, 1]]);
    let sum = 0, count = 0;
    for (let num of nums) {
        sum += num;
        count += (sumFreq.get(sum - k) || 0);
        sumFreq.set(sum, (sumFreq.get(sum) || 0) + 1);
    }
    return count;
}
            

Explanation

  • Hashing Insight: Track cumulative sums; if sum-k exists, a subarray sums to k.
  • Flow: Update running sum, check map for sum-k, increment its freq.
  • Example Walkthrough: [1,1,1], k=2 → sums=1,2,3, map={0:1,1:1,2:1,3:1}, count=2.
  • Key Detail: sumFreq[0]=1 handles subarrays starting at index 0.
  • Negatives: Works with negative numbers seamlessly.

Note

Time complexity: O(n), Space complexity: O(n). A prefix-sum powerhouse with hashing flair!