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安装与使用redis的方法
Apr 19 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
Tornado 多进程实现分析详解
Jan 12 Python
python抓取京东小米8手机配置信息
Nov 13 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
python和opencv构建运动检测器的实现
Mar 03 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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
MySQL授权问题总结
2007/05/06 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
php实现加减法验证码代码
2014/02/14 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
python解析json实例方法
2013/11/19 Python
Python学习笔记之os模块使用总结
2014/11/03 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
详解Python 解压缩文件
2019/04/09 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
计算机大学生的自我评价
2013/10/15 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
国税会议欢迎词
2014/01/16 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
关于爱国的标语
2014/06/24 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python