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实现简单温度转换的方法
Mar 13 Python
浅谈python对象数据的读写权限
Sep 12 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
Python中@property的理解和使用示例
Jun 11 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
Python字符串的修改方法实例
Dec 19 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
简单的Python人脸识别系统
Jul 14 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
详解php命令注入攻击
2019/04/06 PHP
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
医学生自荐信范文
2013/12/03 职场文书
志愿者服务感言
2014/02/27 职场文书
欢迎领导检查标语
2014/06/27 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
学生会自荐信
2019/05/16 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL
python处理json数据文件
2022/04/11 Python
python 闭包函数详细介绍
2022/04/19 Python