博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大连续子序列和的问题
阅读量:6229 次
发布时间:2019-06-21

本文共 1289 字,大约阅读时间需要 4 分钟。

问题描述 :
       数组 int  A[] = {-4 , 3 ,56 , -15 , 34 , 0 , -14 , 4} ; 某几个连续的子序列其和最大,比如A0+A1 = -1 。A1+A2+A3+A4 = 78 。则A1,A2,A3,A4组成的数组即是所求。

解决方案:

1.暴力求解O(n3)

  两层for循环,指定首尾指针,再来一层for循环来计算和,然后更新最大和就行。

2.动态规划O(n)

  动态规划的思想就是不断利用前面已经求得的结果,来计算当前的最优值。我们可以用sum[i]数组来表示,以A[i]为结尾的连续子数组的最大和。

  可以写出转态方程大概就是:sum[i]=max(sum[i-1]+A[i],A[i]).

代码:

 

int a[NUM]={-1,-1,9,9,9,-1 ,-1, 9 };    int sum=a[0];    int res=a[0];    for (int i=1;i
res) res=sum; } cout<
<

 

 

3.动态规划O(n)简化版

  设sum[i]表示为以第i个元素结尾且和最大的连续子数组。假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且和最大的连续子数组实际上,要么是sum[i-1]加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + a[i], a[i])。

  可以通过判断sum[i-1] + a[i]是否大于a[i]来做选择,而这实际上等价于判断sum[i-1]是否大于0。由于每次运算只需要前一次的结果,因此并不需要像普通的动态规划那样保留之前所有的计算结果,只需要保留上一次的即可,因此算法的时间和空间复杂度都很小。(sum[i-1]+a[i]>a[i]-->sum[i-1]+a[i]-a[i]>0-->sum[i-1]>0)。

伪代码:

result = a[1]sum = a[1]for i: 2 to LENGTH[a]  if sum > 0    sum += a[i]  else    sum = a[i]  if sum > result    result = sumreturn result

 

实现:

int MaxSum(int* a,int NUM){    int sum=a[0];    int res=a[0];    for (int i=1;i
0) sum+=a[i]; else sum=a[i];*/ sum=max(sum+a[i],a[i]) res=max(sum,res); } return res; }

 

 

转载于:https://www.cnblogs.com/fightformylife/p/4090061.html

你可能感兴趣的文章
开源SIP服务器加密软件NethidPro升级
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
python pip install 出现 OSError: [Errno 1] Operation not permitted
查看>>
oracle12C 重做日志
查看>>
zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
查看>>
从源码分析scrollTo、scrollBy、Scroller方法的区别和作用
查看>>
ObjectOutputStream和ObjectInputStream
查看>>
创建使用 framework和 a静态库
查看>>
Codeigniter 4.0-dev 版源码学习笔记之五——相对于 3.x 的变化
查看>>
mariadb 实用功能3 修改表结构显示进度
查看>>
部署 Office Communications Server 2007 R2 Enterprise Edition-Part01
查看>>
烂泥:阿里云RDS本地恢复数据
查看>>
[IE 技巧] 显示/隐藏IE 的菜单/工具栏
查看>>
Hadoop概念学习系列之搭建(windows)Eclipse/MyEclipse远程操作(Linux上)hadoop2.2.0/hadoop2.6.0 出错集(三十五)...
查看>>
一些C++11语言新特性 - Uniform Initialization
查看>>
nagios客户端未启动报错
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
微软豪购Linkedin 补移动社交船票?
查看>>