class Solution {
public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) {
int ans = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
if (i + 1 >= firstLen && nums.length - i - 1 >= secondLen) {
int tmp = Math.max(ans, maxsum(nums, 0, i, firstLen) +
maxsum(nums, i + 1, nums.length - 1, secondLen));
ans = Math.max(ans, tmp);
}
if (i + 1 >= secondLen && nums.length - i - 1 >= firstLen) {
int tmp = Math.max(ans, maxsum(nums, 0, i, secondLen) +
maxsum(nums, i + 1, nums.length - 1, firstLen));
ans = Math.max(ans, tmp);
}
}
return ans;
}
private int maxsum(int[] nums, int start, int end, int len) {
int maxsum = 0;
int sum = 0;
for (int i = start; i <= end; i++) {
if (i - start + 1 <= len) {
sum += nums[i];
if (i - start + 1 == len) maxsum = sum;
} else {
sum -= nums[i - len];
sum += nums[i];
maxsum = Math.max(sum, maxsum);
}
}
return maxsum;
}
}