zoukankan      html  css  js  c++  java
  • [LintCode] Maximum Subarray Difference

    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.

    左右两头扫,注意要分别记录左边最大子段和、最小子段和,右边最大子段和、最小子段和。

     1 class Solution {
     2 public:
     3     /**
     4      * @param nums: A list of integers
     5      * @return: An integer indicate the value of maximum difference between two
     6      *          Subarrays
     7      */
     8     int maxDiffSubArrays(vector<int> nums) {
     9         // write your code here
    10         if (nums.empty()) return -1;
    11         int N = nums.size();
    12         vector<int> max_sum_l(N), min_sum_l(N);
    13         int max_tmp = nums[0], min_tmp = nums[0];
    14         max_sum_l[0] = min_sum_l[0] = nums[0];
    15         for (int i = 1; i < N; ++i) {
    16             max_tmp = max(max_tmp + nums[i], nums[i]);
    17             min_tmp = min(min_tmp + nums[i], nums[i]);
    18             max_sum_l[i] = max(max_tmp, max_sum_l[i-1]);
    19             min_sum_l[i] = min(min_tmp, min_sum_l[i-1]);
    20         }
    21         vector<int> max_sum_r(N), min_sum_r(N);
    22         max_tmp = min_tmp = nums[N-1];
    23         max_sum_r[N-1] = min_sum_r[N-1] = nums[N-1];
    24         for (int i = N - 2; i >= 0; --i) {
    25             max_tmp = max(max_tmp + nums[i], nums[i]);
    26             min_tmp = min(min_tmp + nums[i], nums[i]);
    27             max_sum_r[i] = max(max_tmp, max_sum_r[i+1]);
    28             min_sum_r[i] = min(min_tmp, min_sum_r[i+1]);
    29         }
    30         int res = 0;
    31         for (int i = 0; i < N - 1; ++i) {
    32             res = max(res, abs(max_sum_l[i] - min_sum_r[i+1]));
    33             res = max(res, abs(min_sum_l[i] - max_sum_r[i+1]));
    34         }
    35         return res;
    36     }
    37 };
  • 相关阅读:
    基本Dos命令
    安装java开发环境
    windouws常用快捷键
    elasticsearch(ES)
    使用kibana操作elasticsearch(es)
    Dubbo的负载均衡
    springboot结合Dubbo的使用
    Dubbo
    zookeeper-理解
    springboot结合FTP服务器实现文件上传
  • 原文地址:https://www.cnblogs.com/easonliu/p/4583409.html
Copyright © 2011-2022 走看看