42-最大子数组 II

给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。

每个子数组的数字在数组中的位置应该是连续的。

返回最大的和。

注意事项

子数组最少包含一个数

样例

给出数组 [1, 3, -1, 2, -1, 2]

这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7

挑战

要求时间复杂度为 O(n)

标签

贪心 枚举法 LintCode 版权所有 数组 子数组 前后遍历

思路

从左自右、从右自左分别遍历数组。每次遍历均记录当前最大的单子数组,用2个数组left,right保存。如left[i]的值表示nums从0至i中最大子数组的值,right[i]的值表示nums从i至size-1中最大子数组的值。

最后遍历left,right数组,left[i]+right[i+1]表示在第i位拆分数组,得到其子数组的和。

code

  1. class Solution {
  2. public:
  3. /**
  4. * @param nums: A list of integers
  5. * @return: An integer denotes the sum of max two non-overlapping subarrays
  6. */
  7. int maxTwoSubArrays(vector<int> nums) {
  8. // write your code here
  9. int size = nums.size(), i = 0, sum = 0, maxValue = 0;
  10. int *left = new int[size];
  11. sum = maxValue = left[0] = nums[0];
  12. for(i=1; i<size; i++) {
  13. if(sum < 0) {
  14. sum = nums[i];
  15. }
  16. else {
  17. sum += nums[i];
  18. }
  19. if(sum > maxValue) {
  20. maxValue = sum;
  21. }
  22. left[i] = maxValue;
  23. }
  24. int *right = new int[size];
  25. sum = maxValue = right[size-1] = nums[size-1];
  26. for(i=size-2; i>=0; i--) {
  27. if(sum < 0) {
  28. sum = nums[i];
  29. }
  30. else {
  31. sum += nums[i];
  32. }
  33. if(sum > maxValue) {
  34. maxValue = sum;
  35. }
  36. right[i] = maxValue;
  37. }
  38. int result = 0x80000000;
  39. for(i=0; i<size-1; i++) {
  40. result = (result > left[i]+right[i+1])?result:(left[i]+right[i+1]);
  41. }
  42. delete[] left;
  43. delete[] right;
  44. return result;
  45. }
  46. };

lintcode-42-最大子数组 II的更多相关文章

  1. lintcode:最大子数组II

    题目 最大子数组 II 给定一个整数数组,找出两个不重叠子数组使得它们的和最大. 每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 样例 给出数组[1, 3, -1, 2, -1, 2], ...

  2. lintcode:最大子数组差

    题目 最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 样例 给出数组[1, 2, -3, 1], ...

  3. LintCode 6---合并排序数组 II

    import java.util.Arrays; public class Lint6 { /* * 合并两个排序的整数数组A和B变成一个新的数组.新数组也要有序. */ public static ...

  4. LintCode之合并排序数组II

    题目描述: 分析:题目的意思是把数组A和数组B合并到数组A中,且数组A有足够的空间容纳A和B的元素,合并后的数组依然是有序的. 我的代码: public class Solution { /* * @ ...

  5. 最大子数组(I, II, III,IV,V)和最大子数组乘积 (动态规划)

    I 找一个连续最大子数组,sum加到nums[i], 如果前面子数组和<0则舍去,从头开始. class Solution { public: /** * @param nums: A list ...

  6. lintcode :最大子数组

    题目:  最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...

  7. lintcode 中等题:搜索旋转排序数组II

    题目 搜索旋转排序数组 II 跟进“搜索旋转排序数组”,假如有重复元素又将如何? 是否会影响运行时间复杂度? 如何影响? 为何会影响? 写出一个函数判断给定的目标值是否出现在数组中. 样例 给出[3, ...

  8. lintcode:合并排序数组 II

    题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] ...

  9. lintcode 最大子数组III

    题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...

随机推荐

  1. 3D立方体

    效果图 主要用到的3D属性 1.保留子元素的3d属性:transform-style:preserve-3d; 2.2D变形属性: ①transform:translate()平移,分X轴,Y轴,Z轴 ...

  2. Scala的符号入门

    Spark是由Scala编写的.Spark作为一款十分易用高效的大数据框架使用越来越广泛,Scala也随之有更多的人去学习. 语言相通,相信有python.java基础的程序员学习Scala并没有太大 ...

  3. s3c2440系统时钟详解

    一.S3C2440系统时钟体系 S3C2440的时钟控制逻辑可以外接晶振,然后通过内部电路产生时钟源:也可以直接使用内部提供的时钟源,他们通过引脚的设置来选择.时钟逻辑给整个芯片提供了3中时钟:FCL ...

  4. VSCode 配置 C++

    每次换台电脑写c++,就要找配置,很是繁琐.这次自己写篇博客,记录下相关配置过程. 安装编译器 打开下面的网站 http://www.msys2.org ,下载 64 位的 MSYS2,按照主页上的步 ...

  5. java并发(1)

    hashmap效率高单线程不安全,hashTable效率低但线程安全 因为hashTable使用synchronized来保证线程安全,所以效率十分低,比如线程1使用put插入数据时,线程2既不能使用 ...

  6. java 代理模式(模拟代购)

    interface Isubject{ void buyAJ(); } class realsubject implements Isubject{ public void buyAJ(){ Syst ...

  7. 如何制作 Ubuntu 系统的 USB 启动盘

    下载 Ubuntu 打开 http://mirrors.ustc.edu.cn 获取安装镜像 --> 获取 ISO 刻录 Ubuntu 到 U 盘 打开 http://rufus.akeo.ie ...

  8. HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...

  9. chapter1

    任何语言的开篇,想要学下去肯定要搞环境啦,下面我们就开始. 安装Kali Linux 虚拟机 首先进入kali的官网https://www.kali.org/downloads/,因为是新手,因此建议 ...

  10. 广州Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...