这道题感觉非常有意思,值得记录一下。思路来源:https://codesolutiony.wordpress.com/2015/05/28/lintcode-maximum-subarray-difference/
public class Solution {
/**
* @param nums: A list of integers
* @return: An integer indicate the value of maximum difference between two
* Subarrays
*/
public int maxDiffSubArrays(ArrayList<Integer> nums) {
// write your code
int len = nums.size();
int[] maxLeft = new int[len], minLeft = new int[len];
// sweep from left
int max = nums.get(0), min = nums.get(0), localmax = max, localmin = max;
maxLeft[0] = minLeft[0] = max;
for(int i = 1; i < len; i ++){
localmax = Math.max(nums.get(i), localmax+nums.get(i));
localmin = Math.min(nums.get(i), localmin+nums.get(i));
maxLeft[i] = Math.max(max, localmax);
minLeft[i] = Math.min(min, localmin);
}
//sweep from right
max = min = nums.get(len-1);
int res = Math.max(max-minLeft[len-2], maxLeft[len-2]-min);
localmax = localmin = nums.get(len-1);
for(int i = len-2; i > 0; i--){
localmax = Math.max(nums.get(i), localmax+nums.get(i));
localmin = Math.min(nums.get(i), localmin+nums.get(i));
int maxRight_i = Math.max(max, localmax);
int minRight_i = Math.min(min, localmin);
int tmp = Math.max(maxRight_i - minLeft[i-1], maxLeft[i-1] - minRight_i);
res = Math.max(tmp, res);
}
return res;
}
}