Back to all solutions

#1546 - Maximum Number of Non-Overlapping Subarrays With Sum Equals Target

Problem Description

Given an array nums and an integer target, return the maximum number of non-empty non-overlapping subarrays such that the sum of values in each subarray is equal to target.

Solution

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var maxNonOverlapping = function(nums, target) {
  const prefixSums = new Map();
  let currentSum = 0;
  let result = 0;
  prefixSums.set(0, 0);

  for (let i = 0; i < nums.length; i++) {
    currentSum += nums[i];

    if (prefixSums.has(currentSum - target)) {
      result++;
      prefixSums.clear();
      prefixSums.set(0, i + 1);
      currentSum = 0;
    } else {
      prefixSums.set(currentSum, i + 1);
    }
  }

  return result;
};