最大连续子数组和(最大子段和)
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.编程环境
- 使用java语言编写,使用eclipse。
3.解题的思路
- 从头开始累加数组的元素,初始值 sum 为 0 。假设a b c都为正整数,第一步 把 a累加, 则 sum =- a,接着累加 b , sum = -a+b,再接着 c累加 sum = -a+b+c,但是此时我们发现 sum <c ,第一个元素开始累加到第三个元素的 和 sum 比 第三个元素竟然还要小,那么我们就舍去前面的值,从第三个元素开始累加 ,此时 sum = c。就这样遍历到最后一个元素,得出最大字段的值。
4.代码的编写
-
在主函数中完成数列个数的输入,和每个数列的值以及对子函数的调用。
-
在子函数中根据由主函数传递的数列个数,及每个数来实现对于最大字段和值的计算。
-
代码截图如下:
5.单元测试
- 五种逻辑覆盖的方法有:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖。
- 我这里采用条件覆盖,测试样例含有三种可能:
(1)数列全为正数.(2)数列全为负数。(3)数列中既有负数还有正数。
- 单元测试如下图: