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;
}
}
标签:arr,right,target,int,sum,1477,数组,目标值,dp 来源: https://www.cnblogs.com/tianyiya/p/15843006.html