描述:
给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。
返回这个最大的差值。
注意事项
子数组最少包含一个数
样例:
给出数组[1, 2, -3, 1],返回 6
public class Solution {
/**
* @param nums: A list of integers
* @return: An integer indicate the value of maximum difference between two
* Subarrays
*/
public int maxDiffSubArrays(int[] nums) {
// write your code here
int n = nums.length;
int result = Integer.MIN_VALUE;
for(int i = 0;i<n - 1;i++){
int max1 = searchmax(nums , 0 , i);
int min1 = searchmin(nums , i + 1 , n - 1);
int max2 = searchmax(nums , i + 1 , n - 1);
int min2 = searchmin(nums , 0 , i);
int temp1 = Math.abs(max1 - min1);
int temp2 = Math.abs(max2 - min2);
result = Math.max(Math.max(result , temp1) , temp2);
}
return result;
}
public int searchmax(int[] nums , int start , int end){
int sum = 0;
int max = Integer.MIN_VALUE;
for(int i = start;i<=end;i++){
sum += nums[i];
if(sum > max){
max = sum;
}
if(sum < 0){
sum = 0;
}
}
return max;
}
public int searchmin(int[] nums , int start , int end){
int sum = 0;
int min = Integer.MAX_VALUE;
for(int i = start;i<=end;i++){
sum += nums[i];
if(sum < min){
min = sum;
}
if(sum > 0){
sum = 0;
}
}
return min;
}
}