1.题目要求
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。 -- 引用自《百度百科》
2.代码的编写
这个代码的时间复杂度有点高,但是我目前还没想到别的方法,如我想到了其他的方法就贴在下面。
coding点这里
3.程序流程图
4.利用eclipse中的Junit对代码进行测试
根据上面的程序流程图来选择两组数据,从而来测试程序的正确性。
这三组数据分别是{7 -1 -2 -3 -2 -5 -1 -2} ,{7 -2 11 -4 13 -5 -5 -2}和{6 -1 -2 -3 1 2 3}
其代码:
然后对测试结果分析
5.总结
希望下次能把作业做的更好一点吧,毕竟我感觉我和很多同学还差蛮多的。引用单老师的一句话就是“杀人偿命,欠债还钱” 。
今天研究了一会儿,想到了一个时间复杂度低的方法。
今天我参考了一下杭电上别人写的代码点这里
我的代码:
上一个代码的时间复杂度为O(n2)而这个代码的时间复杂度为O(n);
来测试一下看看这个代码是否正确(测试代码就不需要重新写啦,只要把调用的函数改一下)
然后看看测试结果: