Python语言描述最大连续子序列和


Posted in Python onDecember 05, 2017

求最大连续子序列的和是一个很经典很古老的面试题了,记得在刚毕业找工作面试那会也遇到过同款问题。今儿突然想起来,正好快到毕业季,又该是苦逼的应届生们各种面试的时候到了,就给写了一些小代码解决这个问题。也希望各位找工作的同志们都拿到心目中理想的offer,从此以后,战胜高富帅,赢取白富美,走上人生巅峰。

1.问题描述

假设有一数组(python里为list啦)[1,3,-3,4,-6,-1],求数组中最大连续子序列的和。例如在此数组中,最大连续子序列的和为5,即1+3+(-3)+4 = 5

2.O(n2)的解法

最简单粗暴的方式,双层循环,用一个maxsum标识最大连续子序列和。然后每次判断更新。没有太多可以说的,直接上代码

def maxSum(list):
  maxsum = list[0]
  for i in range(len(list)):
    maxtmp = 0
    for j in range(i,len(list)):
      maxtmp += list[j]
      if maxtmp > maxsum:
        maxsum = maxtmp
  return maxsum
if __name__ == '__main__':
  list = [1,3,-3,4,-6]
  maxsum = maxSum(list)
  print "maxsum is",maxsum

运行结果

maxsum is 5

3.O(n)解法

在任何讲动态规范的地方都能找到求最大连续子序列和的例子。具体来说,假设数组为a[i],因为最大连续的子序列和必须是在位置0-(n-1)之间的某个位置结束。那么,当循环遍历到第i个位置时,如果其前面的连续子序列和小于等于0,那么以位置i结尾的最大连续子序列和就是第i个位置的值即a[i]。如果其前面的连续子序列和大于0,则以位置i结尾的最大连续子序列和为b[i] = max{ b[i-1]+a[i],a[i]},其中b[i]就是指最大连续子序列的和。

def maxSum(list_of_nums):
  maxsum = 0
  maxtmp = 0
  for i in range(len(list_of_nums)):
    if maxtmp <= 0:
      maxtmp = list_of_nums[i]
    else:
      maxtmp += list_of_nums[i]

    if(maxtmp > maxsum):
      maxsum = maxtmp
  return maxsum
if __name__ == '__main__':
  list_of_num = [1,3,-3,4,-6]
  maxsum = maxSum(list_of_num)
  print "maxsum is: ",maxsum

运行结果

maxsum is 5

总结

以上就是本文关于Python语言描述最大连续子序列和的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python自定义线程类简单示例
Mar 23 Python
python方法生成txt标签文件的实例代码
May 10 Python
python读出当前时间精度到秒的代码
Jul 05 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
用python实现一个简单的验证码
Dec 09 Python
python 用pandas实现数据透视表功能
Dec 21 Python
python matplotlib坐标轴设置的方法
Dec 05 #Python
详解K-means算法在Python中的实现
Dec 05 #Python
Python实现字符串匹配算法代码示例
Dec 05 #Python
Django实现简单分页功能的方法详解
Dec 05 #Python
Python生成8位随机字符串的方法分析
Dec 05 #Python
在Python程序员面试中被问的最多的10道题
Dec 05 #Python
Python对列表去重的多种方法(四种方法)
Dec 05 #Python
You might like
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
php强制下载文件函数
2016/08/24 PHP
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
js跳转页面方法总结
2014/01/29 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
解决Python安装cryptography报错问题
2020/09/03 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
初中化学教学反思
2014/01/23 职场文书
优秀教师工作感言
2014/02/16 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
幼师自荐信范文
2015/03/06 职场文书
个人简历求职信范文
2015/03/20 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
初一英语教学反思
2016/02/15 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技