最大子序列和
来源:互联网 发布:西安爱知 地址 编辑:程序博客网 时间:2024/05/18 18:02
一、暴力求解
时间复杂度为n^2
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <cmath>using namespace std;#define inf 0x3f3f3f3fint main(){ int a[10002],maxx,sum,n; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%d",&a[i]); maxx = -inf for(int i=0;i<n;++i) { sum = 0; for(int j=i;j<n;++j) { sum += a[j]; maxx=max(sum,maxx) } } printf("%d\n",maxx);}
优化
时间复杂度n
该方法优化的基于的思想就是,最大连续子序列的开始一段的序列肯定不会是负数。
比如i……j……n是最大连续子序列的话,那么i+….+j肯定大于0,否则,我们就可以把这一段序列去掉换来更大的和。
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <cmath>using namespace std;#define inf 0x3f3f3f3fint main(){ int a[10002],maxx,n,sum; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%d",&a[i]); sum = 0; maxx = -inf; for(int i=0;i<n;++i) { if(sum<=0)//如果前面的和为负,则前面的序列舍掉从本元素开始重新确定新序列 sum = a[i]; else//如果前面的和为正,则可能出现在最大序列中,所以要继续累加 sum += a[i]; maxx=max(maxx,sum) } printf("%d\n",maxx); return 0;}
阅读全文
0 0
- 最大子序列和
- 最大子序列和
- 最大和子序列
- 最大子序列和
- 最大子序列和
- 最大子序列和
- 最大子序列和
- 最大子序列和?
- 最大子序列和
- 最大子序列和
- 和最大子序列
- 最大子序列和
- 最大子序列和
- 最大子序列和
- 最大子序列和
- 最大子序列和
- 最大和子序列
- 最大子序列和
- 10,外观模式-我来组成头部
- PE文件结构及其加载机制(一)
- HTTP and HTTPS
- Docker私有仓库搭建
- error: 'vector' does not name a type
- 最大子序列和
- 虚拟机开机出错—非法关机造成的
- 微信公众号开发调用微信接口,SPA应用注意事项
- U-boot配置及编译阶段流程宏观分析
- jq 跳转页面
- C++中的static关键字的总结
- 81. Search in Rotated Sorted Array II
- java控制台输入示例分享
- 文章标题