软件工程第三次作业

本文介绍了最大子段和问题的解决方法,并通过动态规划法实现了最大连续子数组和的计算。提供了具体的Java实现代码及测试用例,帮助读者理解和验证算法的有效性。
题目(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。

编写测试类

采用动态规划法,时间复杂度和空间复杂度都相对较少具体代码如下:

import java.util.*;
/**
 * 
 * @author Bill
 * 
 * 2018/03/29
 */
public class Maxsum {
    public static int test(int[] array)
    {
        int [] maxsum=new int[1000];
        int SUM=0;
        int Count = array.length;
        for(int i=1;i<Count;i++)
        {
            if(maxsum[i-1]>0)
                maxsum[i]=maxsum[i-1]+array[i];
            else
                maxsum[i]=array[i];
            if(maxsum[i]>SUM)
                SUM=maxsum[i];
            
                  
        }
        return SUM;
     }
}

编写测试程序
测试程序主要运用条件组合覆盖来对测试类测试,具体代码如下:


import static org.junit.Assert.*;


import org.junit.Test;

public class MaxsumTest {

    @Test
    public void test() {
            int[] sum=new int[]{-4,-1,-4,-10,-5,-1};//均为负数时
            int s=new Maxsum().test(sum);
            assertEquals(0,s);
    }
    
    @Test
    public void test1() {
            int[] sum=new int[]{1,2,-3,4,5,6,-7};
            int s1=new Maxsum().test(sum);
             assertEquals(15,s1);  
     
    }
    
    @Test
    public void test2() {
        int[] sum=new int[]{-1,-2,-23,-14,-5,67,-7};
        int s2=new Maxsum().test(sum);
         assertEquals(67,s2);  
 
    }
    
    @Test
    public void test3() {
        int[] sum=new int[]{-1,-14,5,-67};
        int s3=new Maxsum().test(sum);
         assertEquals(23,s3);  
 
    }

}
测试结果

1343512-20180329204718484-1249541585.png

Coding:

测试的类 测试程序

转载于:https://www.cnblogs.com/wamgzuo/p/8672110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值