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实现统计代码行数的方法
May 22 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python读取二进制mnist实例详解
May 31 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
python @property的用法及含义全面解析
Feb 01 Python
python删除本地夹里重复文件的方法
Nov 19 Python
python 输出所有大小写字母的方法
Jan 02 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python如何使用logging为Flask增加logid
Mar 30 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
德生H-501的评价与改造
2021/03/02 无线电
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
php读取3389的脚本
2014/05/06 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
中专自我鉴定范文
2013/10/16 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers