问题描述

给定一个整数数组 nums 和一个整数 k,判断是否存在两个不相交的连续子数组,它们的和相等,且它们的和为数组所有元素的和的一半。

解法一

解题思路:

要解决这个问题,我们可以使用动态规划的方法。首先,我们计算整个数组的和,然后检查是否存在两个不相交的子数组,它们的和等于总和的一半。我们可以维护一个前缀和数组,然后使用一个哈希表来存储每个前缀和出现的次数,这样我们可以快速检查是否存在另一个子数组,其和等于当前子数组和的补数。

/** @lc app=leetcode.cn id=446 lang=javascript** [446] 等差数列划分 II - Subsequence with Equal Sums*/// @lc code=start
function minSubarray(nums, k) {let sum = 0;for (let num of nums) sum += num;let prefixSum = 0;let count = new Map();count.set(0, [-1]);let minLen = Infinity;for (let i = 0; i < nums.length; i++) {prefixSum += nums[i];let complement = prefixSum - k;if (count.has(complement)) {for (let j of count.get(complement)) {minLen = Math.min(minLen, i - j);}}if (!count.has(prefixSum)) count.set(prefixSum, []);count.get(prefixSum).push(i);}return minLen === Infinity ? -1 : minLen;
}
// @lc code=end