1.题目要求
题目(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。
-- 引用自《百度百科》
本次题目采用Java编译,编译器为eclipse。
2.代码
1.设计思路
由题意可以知道最大子段和:即为连续的几个数相加的生成的最大数,且当所有的数为负数时,最大子数和为0;所以我们可以创建一个数组来存储这些数,用来依次连续相加,然后定义两个数来存储相加的值;分别是旧的子数和新生成的子数和(且定义子数和初始值为0),比较两个数的大小,若旧的子数和值小于新的子数和,则把新生成的值赋给旧的 ;新生成的值小于则旧的值不变,当最后子段和值小于0时,则输出0。
2.函数代码
[github地址](https://github.com/1604172680/test/commit/3c0a38e2f0d8d6fbe5ecf027606e77a5265980be)
3.测试代码1
测试一.数组a={-2,11,-4,13,-5,-2},有6个数进行测试,最大子段和为20。
[github地址](https://github.com/1604172680/test/commit/271d4b31a90f6a07d733d58c823b764297825500)
4.测试代码2
测试二.数组a={-9,11,-8,13,20,-2,9,-8,11,-2},有10个数进行测试,最大子段和为46。
[github地址](https://github.com/1604172680/test/commit/821ac11a605ac0f6e896f09cd1ac7105ec0eb2a6)
5.代码测试3
测试三.数组 a={-9,-5,-8,11,20,-2,-9},有7个数进行测试最大子段和为31。
[github地址](https://github.com/1604172680/test/commit/698ef91b8cccd33d108d797f935c424dd4ba9317)
6.代码测试4
测试四.数组a[]={-9,-5,-8,-11,-20,-2,-9},有7个数进行测试,最大子段和为0。
[github地址](https://github.com/1604172680/test/commit/34a2cc934c477ff665c3a9ab094193e89b145a8a)
7.单元测试结果
本次测试,测试了所有数全为负数的特殊值和各长度不一样的数组的值来检查代码的可行性。