码迷,mamicode.com
首页 > 其他好文 > 详细

[lintcode medium]Maximum Subarray Difference

时间:2015-12-18 08:02:30      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

Maximum Subarray Difference

Given an array with integers.

Find two non-overlapping subarrays A and B, which |SUM(A) - SUM(B)| is the largest.

Return the largest difference.

Example

For [1, 2, -3, 1], return 6.

Note

The subarray should contain at least one number

Challenge

O(n) time and O(n) space.

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
        if(nums==null ||nums.length==0) return 0;
        
        int n=nums.length;
        int res=0;
        
        int[] leftMax=new int[n];
        int[] leftMin=new int[n];

        int sumMax=nums[0];
        int sumMin=nums[0];
        leftMax[0]=sumMax;
        leftMin[0]=sumMin;
 
        for(int i=1;i<n;i++)
        {
            sumMax=Math.max(sumMax+nums[i],nums[i]);
            leftMax[i]=Math.max(leftMax[i-1],sumMax);
            
            sumMin=Math.min(sumMin+nums[i],nums[i]);
            leftMin[i]=Math.min(leftMin[i-1],sumMin);
        }
        

        int[] rightMax=new int[n];
        int[] rightMin=new int[n];
        sumMax=nums[n-1];
        sumMin=nums[n-1];
  
        rightMax[n-1]=sumMax;
        rightMin[n-1]=sumMin;
        for(int i=n-2;i>=0;i--)
        {
            sumMax=Math.max(sumMax+nums[i],nums[i]);
            rightMax[i]=Math.max(rightMax[i+1],sumMax);
            
            sumMin=Math.min(sumMin+nums[i],nums[i]);
            rightMin[i]=Math.min(rightMin[i+1],sumMin);
        }
        
        for(int i=0;i<n-1;i++)
        {
            if(res<Math.abs(leftMax[i]-rightMin[i+1]))
            res=Math.abs(leftMax[i]-rightMin[i+1]);
            
            if(res<Math.abs(leftMin[i]-rightMax[i+1]))
            res=Math.abs(leftMin[i]-rightMax[i+1]);
        }
        
        return res;
    }
}

 

 

[lintcode medium]Maximum Subarray Difference

标签:

原文地址:http://www.cnblogs.com/kittyamin/p/5055955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!