算法第三章上机实践
Posted ydqbala
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第三章上机实践相关的知识,希望对你有一定的参考价值。
1.实践题目
最大子段和
2.问题描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
输入格式:
输入有两行:
第一行是n值(1<=n<=10000);
第二行是n个整数。
输出格式:
输出最大子段和。
3.算法描述
int maxsum(int a[],int n) { int sum=0,k=0; for(int i=0;i<n;i++) { if(k>0) k+=a[i]; else k=a[i]; if(k>sum)sum=k; }
通过对当前子段和与以存的比较,不断更新最大子段和。
4.算法的时间及空间复杂度
时间复杂度为O(n)因为只用了单独的for循环的动态规划求解子段和。
空间复杂度为O(n)因为除了输入开的大小为n的数组,没有开更大的空间,只有几个存储结果的变量。
5.心得体会
动态规划的学习与解答问题比较难思考,但是对编程的复杂度大大减少,使代码更精简,思路更清晰。另外,对于问题不能一味蛮干,需要和自己的队友一起思考,讨论,往往能得出更加合适的答案,感受到合作的魅力。
以上是关于算法第三章上机实践的主要内容,如果未能解决你的问题,请参考以下文章