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自动生成文章
Dec 25 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
Python中IPYTHON入门实例
May 11 Python
两个使用Python脚本操作文件的小示例分享
Aug 27 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
python操作gitlab API过程解析
Dec 27 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
python绘制趋势图的示例
Sep 17 Python
Python 可视化神器Plotly详解
Dec 26 Python
python前后端自定义分页器
Apr 13 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相关资料
2006/10/09 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Python实现批量下载图片的方法
2015/07/08 Python
python爬取内容存入Excel实例
2019/02/20 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
创建学习型党组织实施方案
2014/03/29 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
公司聚餐通知
2015/04/22 职场文书
限期整改通知书
2015/04/22 职场文书
党员身份证明材料
2015/06/19 职场文书
初中体育教学随笔
2015/08/15 职场文书
Python图片检索之以图搜图
2021/05/31 Python
Python实现Hash算法
2022/03/18 Python