Note: (需練習)
先用Local紀錄比較連續或間斷
Global紀錄i前最大值
public int maxTwoSubArrays(ArrayList<Integer> nums) {
//KeyWord: Swipe from left and from right
//Define: left[i] is the maximum sum of in front of i elements
//先用Local紀錄比較連續或間斷
//Global紀錄i前最大值
int[] leftL = new int[nums.size()];
int[] leftG = new int[nums.size()];
//init
leftL[0] = nums.get(0);
leftG[0] = nums.get(0);
for(int i = 1 ; i < nums.size(); i++){
leftL[i] = Math.max(leftL[i - 1] + nums.get(i), nums.get(i));
leftG[i] = Math.max(leftG[i - 1], leftL[i]);
}
int[] rightL = new int[nums.size()];
int[] rightG = new int[nums.size()];
//init
rightL[nums.size() - 1] = nums.get(nums.size() - 1);
rightG[nums.size() - 1] = nums.get(nums.size() - 1);
for(int i = nums.size() - 2; i > 0; i--){
rightL[i] = Math.max(rightL[i + 1] + nums.get(i), nums.get(i));
rightG[i] = Math.max(rightG[i + 1], rightL[i]);
}
int max = Integer.MIN_VALUE;
for(int i = 0; i < nums.size() - 1; i++){
max = Math.max(max, leftG[i] + rightG[i + 1]);
}
return max;
}