Python算法与数据结构--求所有子数组的和的最大值

玄魂工作室-玄魂

玄魂工作室秘书 玄魂工作室 昨天

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

这个题目有多个解法,比如可以用一个二维数组存之前每个数据的和,然后在进行大小比较;但是这样时间负责度就是O(n2)了。

换个思路思考下,因为是要最大数,那么就不需要存储,只需要找最大值就可以了。但是为了找子序列的最大和,在遇到相加为负数的情况要跳过,这块注意代码中最后一个if的注释。

基本思路:一个数一个数相加,相加后和最大数以及当前这个数对比,找出最大的;如果相加后是负数,则累加清零

代码-----------

# -*- coding: utf-8 -*-
"""
题目:输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
基本思路:一个数一个数相加,相加后和最大数以及当前这个数对比,找出最大的;如果相加后是负数,则累加清零
""" if __name__ == "__main__":
#初始化数组,测试数据
#dataList = [-3,-10,30,-5,-6,-100,300]
#dataList = [-3,-10,-30,-5,-6,-1,-100,-300]
#dataList = [-3,-10,0,-5,-6,-100,-300]
dataList = [3,10,0,5,6,100,300]
#dataList = [0,0,0,0,0,0,0]
#prd_data用来记录前面累加的数,一旦累加值是负数,则清零
pre_data = dataList[0]
#用来记录最大值
max_data = pre_data
#遍历数据组进行累加和大小对比
for i in range(len(dataList)):
currData = dataList[i]
#第一个数用来做初始化,从第二个数开始算
if i==0:
continue
else:
#相加后进行temp_data,max_data以及currData的大小对比,找出最大的
temp_data = currData + pre_data
if temp_data > currData:
if temp_data > max_data:
max_data = temp_data
else:
if currData > max_data:
max_data = currData
#如果相加后是负数,则清0,因为一旦出现负数在相加只会让最大值变小
#这块注意**********一定是相加后是负数,而不是这个数本身是负数***********
#因为本身是负数,但是相加后是正数,对后面的数据增大还是有帮助的
if temp_data > 0:
pre_data = temp_data
else:
pre_data = 0 print max_data

精品网络安全视频推荐 - 传说的黑麒麟

精品网络安全课推荐--《密码安全攻防技术精讲》

web安全入门课程推荐--Web 安全恩仇录:漏洞原理

欢迎关注玄魂工作室垂直订阅号 “白话算法”。

优质算法课程推荐,扫码了解详情:

Python算法与数据结构--求所有子数组的和的最大值的更多相关文章

  1. 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)

    我没有实现时间复杂度为O(n)的算法. 思路:从第一数开始,onelist[0]:onelist[0]+onelist[1]:这样依次推算出每个子数组的sum值.和max进行比较.最后得到max值. ...

  2. 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

    群里看到这道题,用python做了做, def find(array): v_sum = greatest = 0 for a in array: v_sum += a v_sum = 0 if v_ ...

  3. python算法与数据结构-算法介绍(31)

    一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...

  4. python算法与数据结构-数据结构中常用树的介绍(45)

    一.树的定义 树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合.如果n==0,树为空树.如果n>0,树有一个特定的结点,根结点根结点只有直接后继,没有直接前驱.除根结点以 ...

  5. python算法与数据结构-队列(44)

    一.队列的介绍 队列的定义:队列是一种特殊的线性表,只允许在表的头部(front处)进行删除操作,在表的尾部(rear处)进行插入操作的线性数据结构,这种结构就叫做队列.进行插入操作的一端称为队尾,进 ...

  6. Python算法和数据结构:在二叉树中找到和为sum的所有路径

    玄魂工作室秘书 [玄魂工作室] 思路:先用递归创建一颗二叉树,作为输入:然后对这课二查树进行递归遍历,递归中每遍历一个节点,下次递归的和为sum-data;并用一个数组记录遍历过的路径,当存在sum时 ...

  7. python算法与数据结构-顺序表(37)

    1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...

  8. python算法与数据结构-单链表(38)

    一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  9. python算法与数据结构-二叉树的代码实现(46)

    一.二叉树回忆 上一篇我们对数据结构中常用的树做了介绍,本篇博客主要以二叉树为例,讲解一下树的数据结构和代码实现.回顾二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left ...

随机推荐

  1. 详解Linux文档属性、拥有者、群组、权限、差异

    写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人的隐私和工作环境,针对某一个文档(文 ...

  2. selenium中浏览器及对应的驱动(可下载)

    https://blog.csdn.net/huilan_same/article/details/52615123,灰蓝大神的总结,可直接下载 下载chrome浏览器,查看版本 http://blo ...

  3. 你不知道的JavaScript--Item15 prototype原型和原型链详解

    用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...

  4. 在Windows Server 2008 R2下搭建jsp环境(一)

    要把jsp项目发布到服务器上必须要有其运行的环境,首先要明确的是: 1.数据库环境:mysql,下载和安装步骤见: 2.后台代码环境:JDK,下载和安装步骤见: 3.服务器:Apache Tomcat ...

  5. 浅谈Java中的final关键字

    浅谈Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  6. BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树

    BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树 Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数 ...

  7. Windows上安装配置SSH教程(7)——几种方式对比

    服务端:Windows XP 客户端:Windows 10 由于Cygwin也可以安装OpenSSH,所以客户端其实可以直接使用Cygwin安装OpenSSH,那么在Windows下使用SCP(安全拷 ...

  8. turtle文库 ——python

    本文将会为您介绍关于python--turtle库函数,学会这个库函数,会有很多让你意想不到的事情发生哦! 我也也会为你们,简单的编写几个代码,让你们看一下turtle函数的魅力 Turtle库是Py ...

  9. Redis持久化方式的选择

    本文将介绍Redis持久化的两种方式:快照持久化和AOF持久化,并对两种方法进行分析和对比,方便在实际中做出选择. 持久化 什么是持久化 Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘 ...

  10. 安卓开发常用icon/png图样

    平时开发当中会用到很多png图样,但是自己又不太会做,因此做好的办法就是直接在网上下载下来用了,这里给大家推荐一个比较好用的网站,免费的,有很多好的png可以直接下载下来使用. http://www. ...