用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的对象,反向查看分配的堆栈。

他也提供快照功能,一下是我的程序运行时的截图:

 

posted @ 2021-03-15 11:10  zhangzhiliang  阅读(261)  评论(1编辑  收藏  举报