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爬虫之抓取糗事百科代码分享
Nov 06 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
基于Python函数和变量名解析
Jul 19 Python
Django框架表单操作实例分析
Nov 04 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Python安装whl文件过程图解
Feb 18 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 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
WordPress网站性能优化指南
2015/11/18 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
python中执行shell的两种方法总结
2017/01/10 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Python异常处理操作实例详解
2018/08/28 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
村委会贫困证明
2014/01/14 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
绘画专业自荐信
2014/07/04 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
司机岗位职责
2015/02/04 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript