博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
环状数组最大子串和 最大和最小是相对的
阅读量:6039 次
发布时间:2019-06-20

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

要知道,最大和最小是相对的,用总和减去最小的就能得到最大的。     编程之美的题目没看懂,然后参考了http://zhangpeizhen.blog.163.com/blog/static/231873112201431784024921/

 

两种情况

1、普通数组,可以o(n)求最大子串和。

2、如果是环状,那么则要看到跨越 n-1 到 0 的这段环状的情况,要求这段最大的和,只需要用总和减去非环状的最小子串和即可。

 

然后取两种情况的最大值即可。

 

#include
#include
#include
#include
#include
using namespace std;void dp() { int i,t1,t2; t1 = arra[0]; t2 = arra[0]; Max = t1; Min = t2; for( i = 1 ; i < n ; i ++) { if(t1 <= 0) t1 = arra[i]; else t1 += arra[i]; if(t2 >= 0) t2 = arra[i]; else t2 += arra[i]; Max = max(t1,Max); Min = min(t2,Min); } Max = max(Max,total-Min); printf("%d\n",max(Max,0));} int main() { while(~scanf("%d",&n)) { total = 0; for(int i = 0 ; i < n ; i ++) { scanf("%d",&arra[i]); total += arra[i]; } dp(); } return 0;}

 

但是我觉得少考虑了一种情况,比如全部为-1的数组,

普通数组最大子串和为-1,

按照上面求的最大的环状的必然为0,但是这样就是什么都不取的状态,

所以我觉得最后需要判断 是否 最小子串和 与 整个数组和 相等,如果相等说明就是上面考虑的情况,那么就取普通数组的的最大子串和就行了。

转载地址:http://ccrhx.baihongyu.com/

你可能感兴趣的文章
c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down...
查看>>
震惊世界的语言——iOS开发新星(Swift)
查看>>
AWS 推出 OpenJDK 长期支持版本 Amazon Corretto
查看>>
劲爆!魔都人民打开流量“不限量”的正确方式
查看>>
又美又好玩的南京“善行者”这才是正确的打开方式
查看>>
小米众筹防霾神器评测:颠覆设计,防霾新革命
查看>>
学习人工智能需要哪些必备的数学基础?
查看>>
仅仅实用就可以了?京东家电告诉你颜值跟性能其实可以并存
查看>>
春日街拍夯货 原来你离时尚只有一道水波纹的距离
查看>>
央行发文促上海2020年迈入全球金融中心前列
查看>>
沙特主帅皮齐离任 成亚洲杯第五位下课主帅
查看>>
有钱了!美国务院要求员工回归岗位 2月发工资
查看>>
香港出现全球首间朱古力便利店
查看>>
林昭亮领衔大师音乐家 共同演绎阿根廷探戈音乐
查看>>
3DMAX入门教程,这样还担心学不会?
查看>>
JJ演唱会门票实名制+人脸识别?黄牛:不想破产就远离林俊杰
查看>>
李彦宏乘无人驾驶汽车装X,北京交管部门已介入调查
查看>>
《大数据》配套PPT之九:第8章 互联网大数据处理
查看>>
高效的序列化/反序列化数据方式 Protobuf
查看>>
SparkSQL 在有赞的实践
查看>>