博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件工程第三次作业
阅读量:4973 次
发布时间:2019-06-12

本文共 1284 字,大约阅读时间需要 4 分钟。

求数组最大子数组和

(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。
-- 引用自


(2).功能函数:

//求最大子数组和    public static int maxarraysum(int[] array) {        int maxsum = 0; //最大和        int sum = 0;  //记录子串的和          for(int i = 0; i < array.length; i++) {            sum += array[i];            if(sum  > maxsum) {                maxsum = sum;               }else if(sum < 0) { //子串和为0则应丢弃,,子串和赋0值                sum = 0;                }        }        return maxsum;    }

(3).流程图

1200829-20180330184818244-712906275.png


(4).单元测试

本次单元测试采用判定条件覆盖,

条件组合 程序执行路径
sum > maxsum abfg
sum < maxsum,sum<0 acdg
sum < maxsum,sum>0 aceg

选取三组测试用例,测试用例如下

{2,4,6,2,4,8,9}
{-2,-4,-6,-2,-4,-8,-9}
{10,-2,-1,-2,-3}

测试类:

public class MaxarraysumTest {    @Test    public void testMaxarraysum() {        int[] array_1 =  {2,4,6,2,4,8,9};        int[] array_2 = {-2,-4,-6,-2,-4,-8,-9};        int[] array_3 = {10,-2,-1,-2,-3};        assertEquals(35, new MaxSubArray().maxarraysum(array_1));        assertEquals(0, new MaxSubArray().maxarraysum(array_2));        assertEquals(10, new MaxSubArray().maxarraysum(array_3));    }}

测试结果

1200829-20180330192001012-87457193.png


详细代码

转载于:https://www.cnblogs.com/puxuebing/p/8673014.html

你可能感兴趣的文章
Oracle单机Rman笔记[5]---脱机异地还原
查看>>
php无缝连接滚动
查看>>
MR案例:多文件输出MultipleOutputs
查看>>
拦截器的四种拦截方式以及Filter的执行顺序(17/4/8)
查看>>
自己实现线程池
查看>>
无法加载 Parallels 驱动器
查看>>
登录后跳转到登录前的页面
查看>>
为什么在进行Full GC之前最好进行一次Minor GC
查看>>
atom常用快捷键-mac亲测
查看>>
一个小玩具:NDK编译SDL的例子
查看>>
代码面试之串(转载)
查看>>
基于TCP协议的项目架构之Socket流传输的实现
查看>>
【转】Python读取PDF文档,输出内容
查看>>
C#小知识点记录,对象的深拷贝
查看>>
Linux C Socket编程:文件上传
查看>>
The wealthiest/richest men in the world
查看>>
AFNetworking图片上传
查看>>
iOS设计模式之代理模式
查看>>
Linux下修改用户主目录与锁定上传目录
查看>>
逻辑右/左移与算术右/左移
查看>>