LeetcodeJun 04, 2026

Find Two Non-overlapping Sub-arrays Each With Target Sum

Hazrat Ali

Leetcode

You have to find two non-overlapping sub-arrays of arr each with a sum equal target. There can be multiple answers so you have to find an answer where the sum of the lengths of the two sub-arrays is minimum.

Return the minimum sum of the lengths of the two required sub-arrays, or return -1 if you cannot find such two sub-arrays.

 

Example 1:

Input: arr = [3,2,2,4,3], target = 3
Output: 2
Explanation: Only two sub-arrays have sum = 3 ([3] and [3]). The sum of their lengths is 2.

Example 2:

Input: arr = [7,3,4,7], target = 7
Output: 2
Explanation: Although we have three non-overlapping sub-arrays of sum = 7 ([7], [3,4] and [7]), but we will choose the first and third sub-arrays as the sum of their lengths is 2.

Example 3:

Input: arr = [4,3,2,6,2,3,4], target = 6
Output: -1
Explanation: We have only one sub-array of sum = 6.

Solution
var minSumOfLengths = function(arr, target) {
    const n = arr.length;
    const best = new Array(n).fill(Infinity);

    const map = new Map();
    map.set(0, -1);

    let prefix = 0;
    let minLen = Infinity;
    let ans = Infinity;

    for (let i = 0; i < n; i++) {
        prefix += arr[i];

        if (map.has(prefix - target)) {
            const start = map.get(prefix - target);
            const len = i - start;

            if (start >= 0 && best[start] !== Infinity) {
                ans = Math.min(ans, len + best[start]);
            }

            minLen = Math.min(minLen, len);
        }

        best[i] = minLen;
        map.set(prefix, i);
    }

    return ans === Infinity ? -1 : ans;
};


Comments