1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) { int[] prefixSums = new int[nums.length + 1]; for (int i = 1; i < prefixSums.length; i++) { prefixSums[i] = prefixSums[i - 1] + nums[i - 1]; }
return Math.max(maxSum(prefixSums, firstLen, secondLen), maxSum(prefixSums, secondLen, firstLen)); }
private int maxSum(int[] prefixSums, int firstLen, int secondLen) { int maxFirstSum = 0; int maxSum = 0;
for (int i = firstLen + secondLen; i < prefixSums.length; i++) { maxFirstSum = Math.max(maxFirstSum, prefixSums[i - secondLen] - prefixSums[i - secondLen - firstLen]); maxSum = Math.max(maxSum, maxFirstSum + prefixSums[i] - prefixSums[i - secondLen]); }
return maxSum; } }
|
References
1031. Maximum Sum of Two Non-Overlapping Subarrays