用java实现数组中最大子数组之和并分析
一,题目及实现代码
题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组。
实现代码:
package d1.java;
public class bftg {
public int maxsum(int a[]){
int i,j;
int thissum=0;
int maxsum=0;
for (i=0;i<a.length;i++) {
thissum=a[i];
for(j=i+1;j<a.length;j++) {
thissum+=a[j];
if(thissum>maxsum){
maxsum=thissum;//比较所有子数组,找出最大
}
}
}
return maxsum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
bftg ma=new bftg();
int x;
int[] Array= {3,-2,5,-1,-5,4,6};
x=ma.maxsum(Array);
System.out.println("最大子数组为"+x);
}
}
结果为10
二,单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
单元测试常用工具为Junit。
在Eclipse中配置Junit的方法有两种方式:
第一种方法:
1、下载junit的jar包,目前它的版本是junit4.12,可以从www.junit.org上下载。
2、在要使用Junit的project名上,点击properties--java build path-libraries, 点击Add External JARs,把Junit包点上就行了。如图所示,点击Add External JARs,选择相应的Junit包
第二种方法:
1、在要使用Junit的project名上,点击properties--java build path-libraries, 点击Add library,选择JunitT即可。如图所示,点击Add library,在弹出的对话框中选择Jnuit,选择测试函数。
完成后会出现在目录。
测试代码:
package d1.java;
import static org.junit.Assert.*;
import org.junit.Test;
public class bftgTest {
@Test
public void testMaxsum() {
bftg ma=new bftg();
int[] Array= {1,-2,5,7,-5,4};
assertEquals(12,ma.maxsum(Array));
}
@Test
public void testMaxsum1() {
bftg ma=new bftg();
int[] Array= {1,-2,5,7,-5,4,7,-2};
assertEquals(18,ma.maxsum(Array));
}
@Test
public void testMaxsum2() {
bftg ma=new bftg();
int[] Array= {1,-2,5,-5,4};
assertEquals(4,ma.maxsum(Array));
}
@Test
public void testMaxsum3() {
bftg ma=new bftg();
int[] Array= {3,-2,5,-1,-5,4,6};
assertEquals(10,ma.maxsum(Array));
}
}
测试结果如下:
三,效能分析
我个人对效能分析的理解是程序占用cpu和内存的综合参数。
我做词频统计用的是java开发的,与之相对应的效能工具是jvisualvm。
jvisualvm能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈。
他也提供快照功能,一下是我的程序运行时的截图: