最大子串和
来源:互联网 发布:淘宝客微信公众号推广 编辑:程序博客网 时间:2024/05/19 17:57
本文讨论的最大子串和指的是在一个数字序列中,求出所有子串各数字之和最大
对于给定的一个数字序列,这里以{-4,11,-2,13,-7,-3,12}为例说明(代码示例则是普遍对于整型数字序列
先给出代码,不懂的读者再看讲解
#include <iostream>using namespace std;int a[1010];long maxSubStr(int a[],int n){ int m=0,sum=0; for(int i=0;i<n;i++){ if(m>0){ m+=a[i]; } else { m=a[i]; } if(m>sum){ sum=m; } } return sum;}int main (){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cout<<"最大子串和:"<<maxSubStr(a,n)<<endl; return 0;}
分析:
在本程序中运用的是动态规划的思想,时间复杂度为O(n),空间复杂度为O(1),
核心思想:
利用中间变量m来更新我们的sum的最大值,
当m<=0时,表明在此下标以前的数字序列的和为负,那么不管我们后边的序列是何值,在加上m后必定不会增加,那么此时我们应该舍弃m,将m更新为下一个值
当m>0,后边序列加上m都会使其增加,则我们更新m的值为此时的m加上下一个值
最关键的是后边的m和sum的比较,此步骤实现了动态规划的思想,当我们检测到m的值比此刻的sum更大时,表明出现了新的最大子串和,更新sum
如果我们需输出最大子串和的每一个组成元素的话,我们就需要引进两个下标变量来记录子串的起始和终止位置
更多内容请关注个人MyBlog
阅读全文
0 0
- 最大子串和
- 最大和子串
- 子串最大和
- 最大子串和
- 最大子串和
- 最大和子串
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大连续子串和
- androidstudio apk调试运行没有问题 apk安装运行闪退
- Android Studio NDK CMake 指定so输出路径以及生成多个so的案例与总结 # 设置so文件生成路径 # set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $
- ipu--camera
- AI系统发明了自己的语言进行沟通,facebook将其关闭!
- 搜索引擎和知识图谱那些事
- 最大子串和
- MINUS使用方法(sql优化)
- MySQL格式化日期
- Live555学习之(三)------建立RTSP连接的过程(RTSP服务器端)
- 回文数的判断(while())
- windows telnet 安装 开启
- 根据日期获取周几
- 浅谈前端的基本素质
- 1996:登山(2.6基本算法之动态规划)