1477. 找两个和为目标值且不重叠的子数组

给你一个整数数组 arr 和一个整数值 target 。

请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target 。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。

请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-two-non-overlapping-sub-arrays-each-with-target-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int minSumOfLengths(int[] arr, int target) {
        int ans = arr.length + 1;
        int[] dp = new int[arr.length + 1];
        dp[0] = arr.length + 1;
        int sum = 0;
        int left = 0, right = 0;
        while (right < arr.length) {
            sum += arr[right];
            while (sum > target) {
                sum -= arr[left++];
            }
            if (sum == target) {
                ans = Math.min(ans, dp[left] + right - left + 1);
                dp[right + 1] = Math.min(dp[right], right - left + 1);
            } else {
                dp[right + 1] = dp[right];
            }
            right++;
        }

        return ans > arr.length ? -1 : ans;
    }
}
上一篇:1.俩数之和


下一篇:LeetCode-209. 长度最小的子数组