Skip to content

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

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.

 

Example 1:

Input: nums = [1,1,1,1,1], target = 2
Output: 2
Explanation: There are 2 non-overlapping subarrays [1,1,1,1,1] with sum equals to target(2).

Example 2:

Input: nums = [-1,3,5,1,4,2,-9], target = 6
Output: 2
Explanation: There are 3 subarrays with sum equal to 6.
([5,1], [4,2], [3,5,1,4,2,-9]) but only the first 2 are non-overlapping.

 

Constraints:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 0 <= target <= 106

 

Solutions

Solution: Prefix Sum

  • Time complexity: O(n)
  • Space complexity: O(n)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
const maxNonOverlapping = function (nums, target) {
  const prefixSum = new Set([0]);
  let result = (current = 0);

  for (const num of nums) {
    current += num;

    if (prefixSum.has(current - target)) {
      result += 1;
      current = 0;
      prefixSum.clear();
      prefixSum.add(0);
    } else {
      prefixSum.add(current);
    }
  }
  return result;
};

Released under the MIT license