问题描述:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2
因此输出为该子数组的和18。
 分析:
最直接的方法就是找出所有的子数组,然后求其和,取最大。如果每个子数组都遍历求和,该方法的复杂度为O(N^3)。

时间复杂度O(n)的实现代码,如下所示:

 // 3.cc
#include <iostream>
using namespace std; // 求子数组连续最大和
int max_sub_sum(int* a, int n) {
int sum = a[n - ];
int start = a[n - ];
for(int i = n - ; i >= ; i--) {
start = max(start + a[i], a[i]);
sum = max(sum, start);
}
return sum;
} int main() {
int a[] = {-, , , -, , -, };
int max_sub = max_sub_sum(a, );
cout << "max sub sum is: " << max_sub << endl;
}

最新文章

  1. C# 异步编程小结
  2. Windows安装 ANT
  3. Web Service(1.8)
  4. Ionic 小节
  5. jdk1.5多线程Lock接口及Condition接口
  6. Golang 网络爬虫框架gocolly/colly 五 获取动态数据
  7. QT 操作 excel 教程
  8. javascript之Style对象
  9. 面向对象版Tab栏切换
  10. JS 操作svg画图
  11. 【iCore4 双核心板_ARM】例程三十四:U_DISK_IAP_ARM实验——更新升级STM32
  12. python中的reverse
  13. 849. Maximize Distance to Closest Person
  14. 请读下面的这句绕口令:ResourceManager中的Resource Estimator框架介绍与算法剖析
  15. IPhoneX网页布局 全屏布局(转)
  16. MapReduce的分区
  17. yyblog2.0 数据库开发规范
  18. ios开发中怎么获取应用崩溃日志
  19. System.DateTime.Now.ToString(&quot;yyyy-MM-dd HH:mm:ss&quot;) 显示24小时制;System.DateTime.Now.ToString(&quot;yyyy-MM-dd hh:mm:ss&quot;)显示12小时制
  20. django网页的分页功能,大家如果有疑问请留言

热门文章

  1. Android 面试题总结
  2. 扩展spring data jpa的数据更新方法时注意事项
  3. Virtualbox虚拟机安装CentOS6.5图文详细教程(zhuan)
  4. Unity5中叹为观止的实时GI效果
  5. c++相关的类型推导
  6. 20145218 《Java程序设计》第7周学习总结
  7. [saiku] 源码整合[普通WEB项目]
  8. 简单的模拟登录Wap版新浪微博
  9. SAP 质检使用非物料基本单位
  10. 前端面试题之nina分享