求子数组的最大和

简介:

分析:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个正数,求所有子数组的和的最大值。

当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。

因此需采用DP思想,记录下当前元素之和(为其最优状态,既最大),将其与目前所得的最大和比较,若大于则更新,否则继续。状态的累加遵循这个过程:如果当前和小于0,则放弃该状态,将其归零。

扩展:数对之差的最大值

 

复制代码
 1 //求子数组的最大和
 2 //利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来小于0,则
 3 //把当前元素之和清为0,否则则和最大和比较,更新最大和,最后得到必是子数组的最大和
 4 #include<iostream>
 5 using namespace std;
 6 
 7 int findGreatestSubSum(const int a[],const int size)
 8 {
 9     int curSum=0;
10     int maxSum=0;
11 
12     for(int i=0;i<size;i++)
13     {
14         curSum+=a[i];
15         if(curSum<0) 
16             curSum=0;   //放弃这个阶段,从新开始
17         if(curSum>maxSum) 
18             maxSum=curSum; //更新最大和
19     }
20 
21     if(maxSum==0)
22     {            //若是数组中的元素均为负数,则输出里面的最大元素
23         maxSum=a[0];          //当然这步也可以写到上面一个循环里
24         for(int i=1;i<size;i++)
25         {
26             if(maxSum<a[i]) 
27                 maxSum=a[i];
28         }
29     }
30     return maxSum;
31 }
32 
33 int main(void)
34 {
35     int a[]={1, -2, 3, 10, -4, 7, 2, -5};
36     int length=sizeof(a)/sizeof(int);
37 
38     cout<<findGreatestSubSum(a,length)<<endl;
39     system("pause");
40     return 0;
41 }
复制代码

 




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3196553.html,如需转载请自行联系原作者

目录
相关文章
|
Java 关系型数据库 MySQL
水果商城系统 SpringBoot+Vue
这篇文章介绍了一个使用SpringBoot+Vue开发的前台和管理员端的水果商城系统,包括用户功能如登录、注册、商品浏览、购物车、订单处理等,以及管理员功能如用户管理、商品管理、新闻公告管理等。
水果商城系统 SpringBoot+Vue
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在 DataWorks 中的 ODPS UDF(User-Defined Function,用户自定义函数)中,支持不定长参数如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
296 0
|
JavaScript 程序员 开发者
你真的完全了解vue组件的概念吗?
【10月更文挑战第7天】你真的完全了解vue组件的概念吗?
|
Linux Anolis 开发者
CentOS 停服后如何给世界更好选择? 龙蜥操作系统从技术创新到商业变现都走了哪些路?
CentOS 停服后如何给世界更好选择? 龙蜥操作系统从技术创新到商业变现都走了哪些路?
163 0
|
存储 算法 Java
Java集合类深度解析与实践应用
Java集合类深度解析与实践应用
365 1
|
存储 C语言
链表—初始化指针变和创建新的节点------区别应用分析
链表—初始化指针变和创建新的节点------区别应用分析
157 0
|
人工智能 城市大脑 安全
城市大脑 | 城市交通治理解决方案
本文介绍了城市大脑 | 城市交通治理解决方案的方案概述,方案价值及优势和最佳实践。
城市大脑 | 城市交通治理解决方案
|
机器学习/深度学习 数据可视化 算法
机器学习——降维算法LDA
机器学习——降维算法LDA
372 0
机器学习——降维算法LDA
|
关系型数据库 MySQL
Mysql查询语句之连表查询和增删改查语句补充
Mysql查询语句之连表查询和增删改查语句补充
254 0
Mysql查询语句之连表查询和增删改查语句补充
|
Windows
电脑上哪个桌面便签软件可以定时重复提醒待办事项?
Windows电脑上哪个桌面便签软件可以定时重复提醒? Windows电脑上系统自带的便签程序不支持设置提醒事项,需要借助其他第三方便签软件才能实现便签定时提醒。
2258 0