2
public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) {3
int[] dp1 = new int[nums.length];4
int[] dp2 = new int[nums.length];7
for (int i = 0; i < nums.length; i++) {12
sum += nums[i] - nums[i - firstLen];13
dp1[i] = Math.max(sum, dp1[i - 1]);18
for (int i = nums.length - 1; i >= 0; i--) {19
if (i + secondLen >= nums.length) {23
sum += nums[i] - nums[i + secondLen];24
dp2[i] = Math.max(sum, dp2[i + 1]);30
for (int i = firstLen - 1; i < nums.length - secondLen; i++) {31
max = Math.max(max, dp1[i] + dp2[i + 1]);36
dp1 = new int[nums.length];37
dp2 = new int[nums.length];40
for (int i = 0; i < nums.length; i++) {45
sum += nums[i] - nums[i - secondLen];46
dp1[i] = Math.max(sum, dp1[i - 1]);51
for (int i = nums.length - 1; i >= 0; i--) {52
if (i + firstLen >= nums.length) {56
sum += nums[i] - nums[i + firstLen];57
dp2[i] = Math.max(sum, dp2[i + 1]);63
for (int i = secondLen - 1; i < nums.length - firstLen; i++) {64
max = Math.max(max, dp1[i] + dp2[i + 1]);69
return Math.max(max1, max2);