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抓取京东图书评论数据
Aug 31 Python
python输出指定月份日历的方法
Apr 23 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
Python多继承原理与用法示例
Aug 23 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Django模型中字段属性choice使用说明
Mar 30 Python
Python实现冒泡排序算法的完整实例
Nov 04 Python
python如何进行基准测试
Apr 26 Python
如何使用flask将模型部署为服务
May 13 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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
YB217、YB235、YB400浅听
2021/03/02 无线电
php max_execution_time执行时间问题
2011/07/17 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
Ext 今日学习总结
2010/09/19 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
Python聊天室实例程序分享
2016/01/05 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
详解Python 正则表达式模块
2018/11/05 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Python高级property属性用法实例分析
2019/11/19 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
python FTP编程基础入门
2021/02/27 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
工人先锋号事迹材料
2014/12/24 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
员工试用期工作总结
2019/06/20 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS