python求最大连续子数组的和


Posted in Python onJuly 07, 2018

抛出问题:

求一数组如 l = [0, 1, 2, 3, -4, 5, -6],求该数组的最大连续子数组的和 如结果为[0,1,2,3,-4,5] 的和为7

问题分析:

这个问题很简单,直接暴力法,上代码。

# -*- coding:utf-8 -*-
# 日期:2018/6/9 7:46
# Author:小鼠标

# 最大连续子数组的和
l = [0, 1, 2, 3, -4, 5, -6]
# 暴力求解
def violence(l = []):
 maxVal = 0
 x,y=0,0
 for i in range(0,len(l)+1):
  for j in range(0,len(l)+1):
   res = sum(l[i:j])
   if res > maxVal:
    maxVal = res
    x = i
    y = j
 return maxVal,x,y
maxVal, x, y = violence(l)
print(maxVal,(x,y))

分治法:

关键是暴力法的时间复杂度太高,所以就在原有的基础上做了进一步的提升--分治法。

所谓分治法就是将原有的列表一分为二,那么最大的子列表只有三种情况:

1、最大子列表完全在左边

2、最大子列表完全在右边

3、最大子列表跨立在中间

所以我们分情况讨论,求出答案。这种方法一定程度的降低了时间复杂度,从之前的n^2降到了(n/2)^2 + 2n

# -*- coding:utf-8 -*-
# 日期:2018/6/9 7:46
# Author:小鼠标

# 最大连续子数组的和
l = [0, 1, 2, 3, -4, 5, -6]
#暴力求解
def violence(l = []):
 maxVal = 0
 x,y=0,0
 for i in range(0,len(l)+1):
  for j in range(0,len(l)+1):
   res = sum(l[i:j])
   if res > maxVal:
    maxVal = res
    x = i
    y = j
 return maxVal,x,y
#分治法 想左扫 向右扫,求出两边的最大值
def left_or_right(l):
 maxVal = 0
 term = 0
 for i in l:
  term += i
  if maxVal < term:
   maxVal = term
 return maxVal
def Separate():
 middle = int(len(l)/2)
 l1 = l[0:middle]
 l2 = l[middle:len(l)]
 #左半部分
 maxVal1,x1,y1 = violence(l1)
 #右半部分
 maxVal2,x2,y2 = violence(l2)
 #跨立在中间
 max_right = left_or_right(l2)
 max_left = left_or_right(l1[::-1])
 maxVal3 = max_right + max_left
 return max(maxVal1,maxVal2,maxVal3)
val = Separate()
print(val)

动态规划:

即便是分治法,时间复杂度还是太高,不满足生产的需求,所以如果说只求最大子序列的和的值而不去追求最大子序列本身,我们又引出一个方法--动态规划

这种方法的时间复杂是是线性的,极大的降低了。

# -*- coding:utf-8 -*-
# 日期:2018/6/9 8:38
# Author:小鼠标

def function(lists):
 max_sum = lists[0]
 pre_sum = 0
 for i in lists:
  # 因为最大子列表一定是从一个非0的数开始的(假定列表中有正数有负数)
  # 所以就可以暂时筛选调小于0的数,即便列表全是负数,那么最大的子列表肯定是负数最大的一个
  if pre_sum < 0:
   pre_sum = i
  else:
   pre_sum += i
  if pre_sum > max_sum:
   max_sum = pre_sum
 return max_sum
lists = [0, 1, 2, 3, -4, 5, -6]
print(function(lists))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的系统实用log类实例
Jun 30 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
Python编写Windows Service服务程序
Jan 04 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python绘制圆柱体的方法
Jul 02 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
Pandas的Apply函数具体使用
Jul 21 Python
python 实现压缩和解压缩的示例
Sep 22 Python
python调试工具Birdseye的使用教程
May 25 Python
python 平衡二叉树实现代码示例
Jul 07 #Python
详解python异步编程之asyncio(百万并发)
Jul 07 #Python
基于Python开发chrome插件的方法分析
Jul 07 #Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 #Python
Python实现的txt文件去重功能示例
Jul 07 #Python
Django 多语言教程的实现(i18n)
Jul 07 #Python
python利用requests库进行接口测试的方法详解
Jul 06 #Python
You might like
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
layui的select联动实现代码
2019/09/28 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python删除某个字符
2018/03/19 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
Python制作词云图代码实例
2019/09/09 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
教师专业理论水平的自我评价分享
2013/11/09 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
集中整治工作方案
2014/05/01 职场文书
英语求职信范文
2014/05/23 职场文书
数学系毕业生求职信
2014/05/29 职场文书
质量月活动总结
2014/08/26 职场文书
工厂标语大全
2014/10/06 职场文书
个人简历求职信范文
2015/03/20 职场文书
2016年春节慰问信息
2015/03/25 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis