这道题感觉非常有意思,值得记录一下。思路来源: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;
}
}
最大子数组差值算法
本文介绍了一种求解两个子数组间最大差值的高效算法实现。通过两次扫描数组,分别从左到右和从右到左进行,计算每个位置上的最大值和最小值,最终得出最大差值。该算法采用Java实现,并详细展示了如何计算最大子数组差值。
1571

被折叠的 条评论
为什么被折叠?



