您的位置:首页 > Web前端

Maximum Subarray Difference Solution

2015-10-22 17:39 267 查看
这道题感觉非常有意思,值得记录一下。思路来源: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;
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: