zoukankan      html  css  js  c++  java
  • 软件工程第三次作业

    题目要求:

    问题: 给定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])=(1 , -2 , 3 , 10 , -4 , 7 , 2 , -5)时,最大子段和为18。
    -- 引用自《百度百科》
    

    解题思路

    从头开始累加数组的元素,初始值 sum 为 0 。第一步 把 1 累加 则 sum = 1,接着 -2 累加 sum = -1,再接着 3 累加 sum = 2,但是此时我们发现 sum < 3,也就是说从第一个元素开始累加到第三个元素的 和 sum 比 第三个元素还要小,那么我们舍去前面的累加值,从第三个元素开始累加 ,此时 sum = 3。
    继续上述步骤,直至遍历到数组的最后一个元素。

    代码

    https://github.com/aioprxu/testJunit/tree/master/src/main/java
    主要算法代码:

    public int max(){
            if( (array.length == 1 && array[0] <= 0)||array.length==0)
            return 0;
    
            int cur = array[0];
            int sum = array[0];
            for(int i = 1;i < array.length;i++){
                if(cur < 0)
                    cur = 0;
                cur = cur + array[i];
                if(sum <= cur)
                    sum = cur;
            }
            if(sum<0) return 0;
            return sum;
        }
    

    单元测试

    本测试采用判定-条件覆盖,即同时满足判定的每个分支至少执行一次,判定的每个条件应取到各种可能的值。
    测试代码如下:

        Assert.assertEquals(0,new TestJunit(new int [] {}).max());
        Assert.assertEquals(0,new TestJunit(new int [] {-1}).max());
        Assert.assertEquals(20,new TestJunit(new int [] {-2,11,-4,13,-5,-2}).max());
        Assert.assertEquals(0,new TestJunit(new int [] {2,3,4,-1,2}).max());
        Assert.assertEquals(0,new TestJunit(new int [] {2,-3,1,3,4}).max());
        Assert.assertEquals(0,new TestJunit(new int [] {-1,-3,-6,-7,-2}).max());
    

    一共有6种可能,分别是:
    1 数组为空
    2 数组长度为1,且第一个值为负数
    3 数组长度大于1,且第一个值为负数
    4 数组长度大于1,且第一个值不为负数
    5 最大子串不在数组开头部分
    6 输入数组值全部小于0

    测试结果如下

    1 数组为空

    2 数组长度为1,且第一个值为负数

    3 数组长度大于1,且第一个值为负数

    4 数组长度大于1,且第一个值不为负数

    5 最大子串不在数组开头部分

    6 输入数组值全部小于0

  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/BBchao/p/8653539.html
Copyright © 2011-2022 走看看