题目:数组中最大的子数组之和
要求:输入:一个数组和它的大小 ;输出:这个数组中最大子数组的和
例如:
一、程序代码
选用java语言来解决此问题,代码如下:
package 子数组最大和; import java.util.Scanner; public class Max { static int Grial(int a[],int n) { int sum = -99999999;//这里如果是sum=0,那么后面在数组全为负的情况,b不可能赋值给sum结果就不对,所以sum的初值要赋一个非常小的初值 int b = 0; for (int i = 0; i < n; i++) { if (b < 0) b = a[i]; else b += a[i]; if (b>sum) sum = b; } return sum; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); System.out.println("数组个数:"); int size=in.nextInt(); System.out.println(size); System.out.println("数组:"); int []a=new int[size]; for(int i=0;i<size;i++) { a[i]=in.nextInt(); } System.out.println( Grial(a,size)); } }
二、单元测试
然后就是要开始进行测试了,在Java中我们常用 Junit4 来进行单元测试,它是Java中一套强大的测试框架,并且Junit4在Eclipse里面直接可以测试,简单快捷,所以选择了Junit4来进行单元测试
首先我们要新建一个Junit Test Case:
然后测试代码如下:
package 子数组最大和; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class MaxTest { Max sum=new Max(); @Before public void setUp() throws Exception { } @Test public void testMax1() { int []Array=new int[]{-1, 2, 3, -4}; assertEquals(5, sum.Grial(Array,4)); } @Test public void testMax2() { int []Array=new int[]{-1, 2, -5, 3, -4}; assertEquals(3, sum.Grial(Array,5)); } @Test public void testMax3() { int []Array=new int[]{-1, 20, -5, 30, -4}; assertEquals(45, sum.Grial(Array,5)); } @Test public void testMax4() { int []Array=new int[]{0,0,0}; assertEquals(0, sum.Grial(Array,3)); } @Test public void testMax5() { int []Array=new int[]{-1,-5,-9,-10}; assertEquals(-1, sum.Grial(Array,4)); } @Test public void testMax6() { int []Array=new int[]{-1,-5,-9,0}; assertEquals(0, sum.Grial(Array,4)); } }
一共进行了六组测试,如下:
测试编号 | 测试用例 | 预期结果 | 实际结果 | 测试通过/否 | 测试期望 |
1 | -1, 2, 3, -4 | 5 | 5 | 通过 | 最大数组为真子集 |
2 | -1, 2, -5, 3, -4 | 3 | 3 | 通过 | 最大数组为单一数 |
3 | -1, 20, -5, 30, -4 | 45 | 45 | 通过 | 最大数组为真子集 |
4 | 0,0,0 | 0 | 0 | 通过 | 数组全为0 |
5 | -1,-5,-9,-10 | -1 | -1 | 通过 | 数组全为负,且最大数组为真子集 |
6 | -1,-5,-9,0 | 0 | 0 | 通过 | 数组为负和0,且最大数组为0 |
测试的结果如下:
三、效能分析
JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题。
JProfiler是由ej-technologies GmbH公司开发的一款性能瓶颈分析工具(该公司还开发部署工具)。
其特点:
原文:https://www.cnblogs.com/hsybk/p/14530861.html