LintCode 45. 最大子数组差

原创 2018年04月16日 09:23:46

给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。

返回这个最大的差值。

public class Solution {
   /**
    * @param nums: A list of integers
    * @return: An integer indicate the value of maximum difference between two substrings
    */
   public int maxDiffSubArrays(int[] nums) {
      // write your code here
      int[][] left = new int[nums.length][2];
      int leftMax = Integer.MIN_VALUE, leftMin = Integer.MAX_VALUE, leftTmp1 = 0, leftTmp2 = 0;
      for (int i = 0; i < left.length - 1; i++) {
         if (leftTmp1 < 0) {
            leftTmp1 = nums[i];
         } else {
            leftTmp1 += nums[i];
         }
         if (leftTmp1 > leftMax) {
            leftMax = leftTmp1;
         }
         left[i][1] = leftMax;

         if (leftTmp2 > 0) {
            leftTmp2 = nums[i];
         } else {
            leftTmp2 += nums[i];
         }
         if (leftTmp2 < leftMin) {
            leftMin = leftTmp2;
         }
         left[i][0] = leftMin;
      }

      int[][] right = new int[nums.length][2];
      int rightMax = Integer.MIN_VALUE, rightMin = Integer.MAX_VALUE, rightTmp1 = 0, rightTmp2 = 0;
      for (int i = right.length - 1; i > 0; i--) {
         if (rightTmp1 < 0) {
            rightTmp1 = nums[i];
         } else {
            rightTmp1 += nums[i];
         }
         if (rightTmp1 > rightMax) {
            rightMax = rightTmp1;
         }
         right[i][1] = rightMax;

         if (rightTmp2 > 0) {
            rightTmp2 = nums[i];
         } else {
            rightTmp2 += nums[i];
         }
         if (rightTmp2 < rightMin) {
            rightMin = rightTmp2;
         }
         right[i][0] = rightMin;
      }

      int result = Integer.MIN_VALUE;
      for (int i = 0; i < nums.length - 1; i++) {
         int tmp1 = Math.abs(left[i][0] - right[i+1][0]);
         int tmp2 = Math.abs(left[i][0] - right[i+1][1]);
         int tmp3 = Math.abs(left[i][1] - right[i+1][0]);
         int tmp4 = Math.abs(left[i][1] - right[i+1][1]);
         int tmp = Math.max(tmp1, Math.max(tmp2, Math.max(tmp3, tmp4)));
         if (tmp > result) {
            result = tmp;
         }
      }
      return result;
   }
}

检测系统是不是windows xp

下面的代码可以检查所用的系统是不是windows xpuses Registry; ... function IsWinXP: Boolean; begin   Result := False;   ...
  • ypyRock
  • ypyRock
  • 2002-01-11 09:39:00
  • 1084

lintcode(45)最大子数组差

描述: 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。  注意事项 子数组最少...
  • sunday0904
  • sunday0904
  • 2017-04-19 08:17:25
  • 431

LintCode-最大子数组差

给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。 您在真实的面试中是否遇到过这个题?  Yes...
  • wangyuquanliuli
  • wangyuquanliuli
  • 2015-06-26 19:42:33
  • 2604

LintCode 45 最大子数组差

题目:maxDiffSubArrays要求:给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。 注意事项 ...
  • linglian0522
  • linglian0522
  • 2017-04-26 09:16:57
  • 253

九章算法面试题31 子数组的最大差

给定一个数组,求两个不相交的并且是连续的子数组A和B(位置连续),满足|sum(A) - sum(B)|最大(和之差的绝对值)。例如[2, -1, -2, 1, -4, 2, 8],可以得到A=[-1...
  • JiuZhang_ninechapter
  • JiuZhang_ninechapter
  • 2015-05-12 14:31:27
  • 1144

lintcode---最大子数组差

题目描述: 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。注意事项: 子数组最少包含一个数样例: 给出...
  • qq_34355232
  • qq_34355232
  • 2017-11-24 17:33:16
  • 87

LintCode 45.最大子数组差

问题描述:给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。返回这个最大的差值。解题思路:要使绝对值差最大,则一定是Amax-Bmin,...
  • ncut_nwpu
  • ncut_nwpu
  • 2018-03-19 15:24:37
  • 16

LintCode 45. 最大子数组差

给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。返回这个最大的差值。public class Solution { /** ...
  • laisinanvictor
  • laisinanvictor
  • 2018-04-16 09:23:46
  • 2

lintcode--45. 最大子数组差

描述 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。 注意事项 子数组最少包含一个数 样例 给出数...
  • second24
  • second24
  • 2018-03-07 10:16:29
  • 15
收藏助手
不良信息举报
您举报文章:LintCode 45. 最大子数组差
举报原因:
原因补充:

(最多只允许输入30个字)