代码地址

https://github.com/ljshLLW/homework

题目

最大连续子数组和(最大子段和)

给定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。

-- 引用自《百度百科》

思路

从数组一个值开始累加,并记录下最大值,当前和。如果当前和小于0则置0,因为加上一个小于0肯定变小,当前和不小于等于0的话,所有数加上当前和都会变大。

流程图

代码实现(Py)

func = lambda x: x>0 and x or 0

def MaxSubArray(array):
maxSum = 0
thisSum = 0
for i in range(len(array)):
thisSum = func(thisSum+array[i])
maxSum = max(thisSum,maxSum)
return maxSum

测试

覆盖标准

采用条件组合覆盖

测试用例分析

len(array)<0 AH 符合条件为[]

len(array)>0 AB...BH

CDFI array[i]为负数 thisSum为正加一个大于thisSum绝对值的负数 例如[1,2,-1]

CDFGI array[i]为正数 thisSum为任意值加一个正数之后小于max 例如[1,2,3]

CEFI array[i]为负数 thisSum为任意值加一个比thisSum的相反数小的数 例如[-1,-2,-3]

CEFGI 永不成立

符合上述条件可总结为一个数组[7,-4,-6]

[7,]满足CDFGI

[7,-4]满足CDFI

[7,-4,-6]满足CEFI

流程图

代码实现

import unittest
from MaxSubarray import MaxSubArray class TestMaxSubArrayFunc(unittest.TestCase): def test_Empty(self):
self.assertEqual(0,MaxSubArray([])) def test_AB_BH(self):
self.assertEqual(7,MaxSubArray([7,-4,-6])) if __name__ == '__main__':
unittest.main(verbosity=2)

测试结果

总结

多加练习

有些人表面风光,背地里for循环怎么写都要百度的更多相关文章

  1. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  2. 第12条:不要在for和while循环后面写else块

    核心知识点: (1)一般的if/else是前面不执行,后面才执行,循环下面的else是前面执行完后面才会执行,如果是break打断也不会执行.循环为空或False也不执行. (2)try/expect ...

  3. 【Filter 页面重定向循环】写一个过滤器造成的页面重定向循环的问题

    今天做一个过滤器,碰上页面重定向循环的情况: 浏览器的访问路径是:http://192.168.16.104:8080/biologyInfo/login/login/login/login/logi ...

  4. 推荐一个IT人必备的东西【用过的都懂,让我们的环境越来越好吧】

    有个东西叫IT人手册,不知道各位有用过吗?不过很可惜以前那个关掉了,那个网站说出了我们IT人太多的新声以及一些黑心公司,不过被迫压力下关闭了 我不是托,我只是分享 我觉得这种东西应该存在下去~!!!至 ...

  5. 昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了

    引言 都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差.最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的 ...

  6. Oracle存储过程游标for循环怎么写

    一.不带参数的游标for循环 首先编写存储过程的整体结构,如下: create or replace procedure test_proc is v_date date; --变量定义 begin ...

  7. 为什么有那么多人愿意喝"鸡汤"?

    什么是心灵鸡汤 心灵鸡汤,就是“充满知识与感情的话语”,柔软.温暖,充满正能量.心灵鸡汤是一种安慰剂,可以怡情,作阅读快餐:亦可移情,挫折.抑郁时,疗效直逼“打鸡血”.这也是“心灵鸡汤”风靡不衰的原因 ...

  8. 这个 Spring 循环依赖的坑,90% 以上的人都不知道

    1. 前言 这两天工作遇到了一个挺有意思的Spring循环依赖的问题,但是这个和以往遇到的循环依赖问题都不太一样,隐藏的相当隐蔽,网络上也很少看到有其他人遇到类似的问题.这里权且称他非典型Spring ...

  9. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

随机推荐

  1. 审核被拒Guideline 2.1 - Information Needed we are unable to find 账号登录 option

    Guideline 2.1 - Information Needed We were unable to sign in to review your app with the demo accoun ...

  2. 推荐一个Monokai风格的EditPlus配色方案

    如何配置 找到EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: ...

  3. Java学习-052-(mybatis+mysql)访问接口时提示:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    在配置mybatis,访问接口提示: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),部 ...

  4. Freemaker Replace函数的正则表达式运用

    replace(param1,param2,param3) param1 正则表达式:param2 将匹配的字符替换成指定字符:param3 模式 param3 参数如下  模式  i   r   m ...

  5. 001-JUnit之断言assert

    一.简介以及pom JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活: 使用全新的断言语法:assertThat, ...

  6. H3C交换机引发的奇葩故障

    设备:H3C S5120-28P-SI 故障:某个交换机的接口速率只有100Mbps. 描述:这个故障还是很特别的,因为按普通的测试办法很难第一时间判断是交换机的固件问题,我也是做了几乎所有外围设备和 ...

  7. vi命令保存

    :q :退出编辑器 :q! :强制退出 :wq   :保存并退出 :wq! :保存并强制退出 ZZ :保存并退出 :x   :保存并退出

  8. 【Linux】Mac PD set centos static ip

    2,修改Centos的网络设置. (1)进入脚本. vi /etc/sysconfig/network-scripts/ifcfg-eth0 My Mac ip: # 从dhcp改成static BO ...

  9. java iso8859 转utf8

    http://www.it1352.com/110853.html https://blog.csdn.net/RR369_yyh/article/details/77582441 /* 输出 下面这 ...

  10. 19.C# 泛型

    1.泛型的概念 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. 2. .net提供的泛型 2.1可空 ...