求连续子数组的最大和

题目描述

给定一个整形数组,有正数也有负数,数组中连续一个或多个组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n);

测试用例

给定数组

{1,-2,3,10,-4,7,2,-5}

输出

18

思路分析

可以用动态规划的思想来完成:

用一个数组max[i]来存以第i个数字结尾的子数组的最大值

则max[i]有以下几种情况:

1.当i=0时,max[i] = data[i];

  例如max[0] = 1;

2.当max[i-1]<0时,max[i] = data[i];

  例如,由第4种情况得到max[2-1] = max[1] = -1<0,则max[2] = data[2] = 3;

3.当max[i-1]+data[i]<=0 && max[i-1]+data[i]<data[i]时,max[i] = data[i];

  例如存在数组{-1,-10},

  当i=1时:max[i-1]+data[i]=-1+(-10) = -11<0   &&   max[i-1]+data[i] = -11  <  data[i] =-10,

  所以max[1] = -10;

4.其他情况,max[i] = max[i-1]+data[i];

  例如max[1] = max[0]+data[1] = -1;

初始化数组max[]的同时,用一个变量保存一下前i个数里面的子数组的和的最大值

max[]初始化结束后,也就得到了连续子数组的最大和

根据以上思路,Java 代码如下:

public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int[] max= new int[array.length];
max[0] = array[0];
int maxNum = Integer.MIN_VALUE;
for(int i = 1; i<array.length;i++){
if(max[i-1]<0)
max[i] = array[i];
else if(maxx[i-1]+array[i]<=0 && max[i-1]+array[i]<array[i]){
max[i] = array[i];
}else{
max[i] = max[i-1]+array[i];
}
if(maxNum<max[i])
maxNum = max[i];
}
return maxNum;
}
}

最新文章

  1. SqlServer传输数据到ORACLE,SSIS
  2. android Gui系统之SurfaceFlinger(3)---SurfaceFlinger
  3. DGbroker三种保护模式的切换
  4. java编译错误 程序包javax.servlet不存在javax.servlet.*
  5. Tomcat 6 --- 使用Jasper引擎解析JSP
  6. 27. Best Time to Buy and Sell Stock &amp;&amp; Best Time to Buy and Sell Stock II &amp;&amp; Best Time to Buy and Sell Stock III
  7. 【Android开发坑系列】之try-catch
  8. nginx 相关问题
  9. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
  10. Poj(1511),SPFA
  11. (转)一网打尽当下NoSQL类型、适用场景及使用公司
  12. POJ1046Color Me Less
  13. table中嵌套table,如何用jquery来控制奇偶行颜色
  14. 汇编-显示我放到AL中的数值
  15. 2013成都网赛 G(x) (HDU 4733)
  16. 【转】介绍Jython,第一部分:轻轻松松写JAVA程序
  17. (转)linux下如何批量杀JAVA进程或某个进程方法
  18. 简单的线性规划-scipy
  19. 第一册:lesson 101。
  20. 看雪CTF第十四题

热门文章

  1. 关于python的“重载”
  2. js 捕获浏览器后退事件
  3. Qt532.数值转为16进制(并填充)
  4. 关于OkHttp同步请求的小错误
  5. RMQ 解决区间查询问题
  6. PHP策略模式demo
  7. jquery中的全选、反选、全不选和单删、批删
  8. Docker 只要一小时,零基础入门Docker(转)
  9. 【洛谷p1319】压缩技术
  10. grid 操作实例