【题目】最大连续子数组和(最大子段和)


  • 背景

    问题: 给定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。
    -- 引用自《百度百科》

    • 具体要求

    (1)要求写出可运行的完整代码提交至GitHub或者Coding.net系统中,并将代码地址附到博客内。
    (2) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中,任选一个标准设计测试用例。
    (3) 请利用自动测试工具对程序进行测试。
    (4) 请将程序运行结果和自动测试分析结果截图附到博客中。

    • 算法与代码实现

      抛弃的算法:通过题目要求,首先想到的是暴力求解,即利用循环,求出每一个子数组的值并进行比较,求出其中子数组的最大值。但是由于此方法效率较低,于是思考下一个方法。

      新的算法:我们首先分析出,当子数组和最大时,该子数组的首位和末位(存在的情况下),一定应为正值,且该子数组一定需要大于零才可作为新的最大的子数组并继续向下运算;否则,我们将抛弃他,并以下一位作为新的运算子数组。我们设每次运算的子数组为ThisSum,新的临时最大的子数组为MaxSum,根据此特性,可以列出公式:Array[i] = MAX(Array[i-1] + A[i] , A[i])

    根据上述公式,已将具体代码提交到GitHub上,便不在此赘述,点此查看Github源代码。

    • 流程图与测试

    根据写出的代码,画出流程图如下:

    为了寻求合适而全面的测试样例,我找出循环内部的两条判断语句的流程,选用判断条件覆盖。

    线段号 ThisSum>MaxSum ThisSum<0
    Blue1 Yes
    Yellow2 No Yes
    Red3 No No

    选用的测试样例数组如下:

    数组 备注
    Array1:{ } 取边界值Ø测试
    Array2:{1,-2,3,4,-5} 1->2->1->1->3
    Array3:{1,2,3,4,5} 辅助测试
    Array4:{-1,-2,-3,-4,-5} 全为负值 故最大为Ø

    根据以上选用的测试样例,测试结果如下:
    Array1:

    Array2:

    Array3:

    Array4:

    自动单元测试JUnitTest结果如下:

    到此,对最大连续子数组求和的内容结束。

    posted @ 2019-04-18 19:27 cocoaman 阅读(...) 评论(...) 编辑 收藏
    刷新评论刷新页面返回顶部

    公告

    Copyright ©2019 cocoaman

转载于:https://www.cnblogs.com/cocoaman/p/10729553.html

最大连续子数组和与JUnit测试相关推荐

  1. 【剑指offer-Java版】31连续子数组的最大和

    连续子数组最大和,要求O(n)时间复杂度 思路:核心思想就是当前遍历数组的时候,遇到的是一个正数,计算这个正数加上已有的和得到一个新的和 如果这个新的和比当前的正数大,那么保留该和否者更新和为当前正数 ...

  2. 算法--三种方法求连续子数组的最大和

    这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典. 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子 ...

  3. 结对开发项目:求整数数组中连续子数组和的最大值

    小组成员:安娜 王鑫楠 题目二:求整数数组中连续子数组和的最大值. 1.分析过程: 题目收到后,前五分钟设计算法,首先也想到是不是一次遍历可以解决,考虑了一下觉得难度有点大最后还是果断放弃.我刚开始的 ...

  4. 最大连续子数组和求解问题

    题目:最大连续子数组和求解问题 一.背景: 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所 ...

  5. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

  6. leetcode-满足连续子数组加和等于目标值的子数组个数 思路与代码

    文章目录 问题描述 问题分析 问题解法 问题描述 问题链接:https://leetcode.com/problems/subarray-sum-equals-k/ 给定一个数组,请找到有多少个连续子 ...

  7. java数据结构与算法之连续子数组问题

    ①.问题描述 给定一个数组nums,0 < nums.length < 1000,请找出该数组的所有子数组并返回!!! 什么是连续子数组呢?比如原数组 nums = [1, 2, 3] 那 ...

  8. 连续子数组的最大和Java

    目录 题目要求 实现思路 代码展示 代码讲解 总结 题目要求 在一个数组中,找到连续子数组的最大和.重点是1.连续 2.最大 3.和.我们把它翻译成人话,举个例子:arr=[1, -2, 3, 1]. ...

  9. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法

    本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...

最新文章

  1. 亚马逊首席技术官预测2021年将改变世界的八大技术趋势
  2. springboot开启jms服务监控jvm运行情况
  3. BugkuCTF-Misc:猫片(安恒)
  4. c c mySQL机票设计_期末课程设计之 c++操作mysql完成机票预订系统(vc 6.0配置mysql环境)...
  5. linux message日志只有4k,linux命令查看日志
  6. python爬取qq音乐评论_爬虫:QQ音乐评论
  7. ajax-》post
  8. 如何构建一个自己的代理ip池
  9. 画出清明上河图的代码_怎样用一串代码画出《清明上河图》?
  10. 2021五一杯数学建模C题思路
  11. LabVIEW实现模糊PID控制
  12. 中国大陆新身份证号码算法
  13. 计算机日历教案,计算机基础教学日历.doc
  14. 吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 一) (转)
  15. uva 10306 简单DP
  16. cpu第几代计算机,赛扬G系列有几代cpu分别是
  17. SE:5.面向对象(上)
  18. Android-PullToRefresh代码分析
  19. 江西大数据平台上线带动赣鄱阳物联网板块-2017年9月江西IDC排行榜与发展报告
  20. 找合适的PMP机构只需2步搞定,一查二问

热门文章

  1. html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
  2. Linux系统文件编程(1)
  3. java中策略设计模式_Java中的设计模式(五):策略模式
  4. oracle引用vs,VS2013中使用oracle,有关引用哪个.dll
  5. 程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站
  6. 百度指数可视化_可视化指数
  7. 游戏 新手引导 设计_我认为每个新手设计师都应该知道什么
  8. 如何融入到更积极的环境,促进技术提升
  9. 尤雨溪开发的 vue-devtools 如何安装,为何打开文件的功能鲜有人知?
  10. Add a All Document Folder