算法编程6:连续子数组的最大和

2023-11-19

问题描述

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。

示例

————————————————————————————————
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
————————————————————————————————
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

思路

典型的动态规划问题
状态方程:max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )

意义是:从头开始遍历数组,遍历到数组元素 arr[ i ] 时,连续的最大的和可能为 max( dp[ i -1 ] ) + arr[ i ] ,也可能为 arr[ i ] ,做比较即可得出哪个更大,取最大值。时间复杂度为 n

编码实现

#!usr/bin/env python
#encoding:utf-8

def test_func(arr):
    '''
    求连续子数组的最大和
    '''
    tmp=0           #临时最大值
    res=-1000000    #比较之后的最大值
    for i in range(len(arr)):
        tmp=max(arr[i],tmp+arr[i])    #状态方程
        res=max(res,tmp)
    print res 
 
if __name__ == '__main__':
    arr = [-1,2,1,3,4,16,7,-30,12,3]
    test_func(arr)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法编程6:连续子数组的最大和 的相关文章

  • Gparted的安装使用,

    安装的方法 在Ubuntu下 sudo apt get install gparted 或者进入ubutun系统商店搜索parted 进行安装 菜单上的位置是 系统 gt 系统管理 gt Gnome分区管理器 Gparted支持动态分区 不
  • 构建前端之光:JavaScript插件的研发艺术

    前言 在前端开发的宇宙中 星星是网页 而照亮这个宇宙的 是我们前端开发者手中的JavaScript插件 插件就像乐高积木 可以将我们的代码块组装成复杂而精美的页面 本文将引导你走进JavaScript插件的世界 探讨如何开发 测试和发布你的
  • cmd 激活anaconda的python运行环境

    cmd 激活anaconda的python运行环境 使用cmd 打开Anaconda 的python环境 输入activate 环境名 弹出activate不是内部或外部命令 解决办法 1 将Anaconda下的路径添加到系统变量 比如我的
  • 高通平台Linux kernel死机解题心得

    1 前言 1 1 目的 能够结合知识背景 借助相关调试工具 使用一般分析手段分析 定位解决项目过程中遇到的死机类系统稳定性问题 提升工作效率 持续积累 拓宽知识深度和广度 1 2 死机 指系统发生致命性异常导致主动或者被动进入系统完全不可用
  • UML类图小结

    类与类之间的关系 1 关联关系 关联 Association 关系是类与类之间最常用的一种关系 它是一种结构化关系 用于表示一类对象与另一类对象之间有联系 如汽车和轮胎 师傅和徒弟 班级和学生等等 图1 关联关系实例 1 双向关联 默认情况
  • auto_ptr 代码及缺陷

    uto ptr是C 标准库里的类 它接受一个类型形参的模板 为动态分配的对象提供异常安全 其实 它的核心思想是 用一个对象存储需要被自动释放的资源 然后依靠对象的析构函数来释放资源 这是 More Effective C 中的解释 下面给出
  • 《机器学习实战》第四章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现

    三大统计分布 1 2 chi 2 2分布 设随机变量 X 1
  • Thinking in Java

    Thinking in Java Java编程思想 学习总结心得 一 前序 学习java也已经有大约两年时间 但大多数断断续续 零散没有系统学习 这次经多方推荐购买了一本java学习必读书籍 Thinking in Java 学习之余将书中
  • python3 [入门基础实战] 爬虫入门之智联招聘的学习(一)

    老实说 懵逼啊 这次爬取的是智联招聘上的求职数据 虽然没有仔细正确核对一下数据是否具有重复性 随机抽查了些 数据大部分还是能对上来的 这次爬取的智联招聘上的数据90页 每页60条 主要抓取的是android开发工程的数据 抓取的数据为全国的
  • 行业权威来揭秘,商用PC为什么首选12代酷睿

    第12代酷睿处理器可以提供更卓越的性能 凭借架构先进性让商用台式机和笔记本电脑为用户带来更好的体验 帮助企业和员工效率倍增 作者 九月 来源 PConline 想要让办公效率进一步提升 一台强大的PC设备是必不可少的生产力和内容创作工具 而
  • SQL Server如何建立表关系

    SQL Server怎么建立关系表 用教师表和学生表举例 两表建立关系之前 要检查连接的条件满足否 比如学生表里的外键 教师ID 要和教师表里的主键 教师ID 的数据类型相同 也就是建立关系的条件数据类型要相同 确认条件满足之后开始建立关系
  • 对象式单片机外部模块驱动编写详解——DAC8552为例

    对象式单片机外部模块驱动编写详解 DAC8552为例 对象式驱动原理 DAC8552基本介绍 DAC8552驱动抽象 源码文件及其解释 参考资料 具体的代码和例程请参照以下GitHub仓库 记得给我star哦 https github co
  • 区块链能提供有效的身份管理?

    随着身份盗窃和数据泄露在世界各地越来越多的情况下 身份验证是一个主要问题 对访问数据的人进行身份验证实际上是他们要求的 每天 数以百万计的人在网上进行不同的活动 从研究一个学术话题 到购买新的项目 到在社交媒体平台上发表评论 甚至进行不同的
  • /etc/init.d

    etc init d目录在Linux系统中可是大名鼎鼎 它只负责一件事情 但却涉及到全系统 它包含系统中各种服务的start stop脚本 从acpid到x11 common 其重要性可见一斑 init d 初始化脚本称之为System V
  • 如何生成序号_合并单元格自动添加序号,还在手动输入就out了,学会三组函数公式一秒搞定...

    相信许多同学在用Excel表格登记各类数据的时候 为了规范表格我们经常会用到序号来进行数据标记 许多朋友在更新序号的时候 基本都是手动输入1 2 3等等 然后手动往下拖动 但是这样数据量比较大的时候 就会比较麻烦 而且如果数据是有合并单元格
  • React-Native使用react-native-community/art实现水波纹、音频波动效果

    效果如下 可以通过改变volume值实现动态效果 贴组件代码 复制就能用 依赖package json react native community art 1 1 2 react native 0 61 4 组件代码DancingLine

随机推荐

  • 第一次竞赛-B.连接竹竿

    B 连接竹竿 Alice从市场上买了N根竹竿 每根竹竿都以 节 为单位 这些竹竿中最短的有A节 最长的有B节 其余竹竿各有长短 每根竿的节数也必定在 A B 范围内 现在Alice希望将这些竹竿用连接部件全部接成一根长竹竿 连接部件的长度忽
  • hive详解——RANK()、DENSE_RANK()、ROW_NUMBER()

    概念 RANK 排序相同时会重复 总数不会变 DENSE RANK 排序相同时会重复 总数会减少 ROW NUMBER 会根据顺序排算 实操讲解 现在有一张score表 做查询操作 SELECT RANK over PARTITION BY
  • 初识C++

    目录 前言 什么是C 1 第一个关键字 namespace 1 namespace的用处 2 如果使用命名空间中的变量和函数 2 C 的输入和输出函数 3 缺省参数 4 函数重载 5 引用 1 初识引用 2 引用的类型 3 引用的特性 4
  • 微信小程序领取查看优惠券,会员卡总结

    又见面了 新项目新需求 这次谈谈小程序微信卡券领卡到查看卡券的功能 在做之前 脑子一头雾水 网上查了资料 基本都是领取卡券的介绍 以为很难实现呢 其实主要工作还是在后台配置以及接口处理 前端的工作量不多 主要就是调取小程序提供的卡券接口 a
  • Gephi入学教程基础记录

    Gephi入学教程基础记录 Gephi版本0 8 1 1 CSV数据输入 1 1 中文显示问题 1 2 标签设置 2 自动生成数据 3 编辑工具介绍 1 节点的移动 2 节点的放大和缩小 3 调整节点颜色 4 边的粗细的调整 6 节点的编辑
  • (可能是)完美解决WSL2重启变IP问题

    WSL2的升级对比WSL1 IO升级是巨大的 以及完整的Linux内核 等等都是完美的Linux发行版 Windows10 解决方法有几步一步一步解决 编辑bat脚本 此方法在 microsoft WSL issues 418 获得 开机启
  • Anlios装grouplist 组件之后报错,安装tiger-vncserver

    因为之前升级了一个epel release源 然后containerd也装进去了 但是版本太低 然后以为是runc挡住了 发现没有runc 删完了containerd就可以装了 rpm ivh http mirrors wlnmp com
  • 用数组实现队列和循环队列

    1 先用数组实现一个队列 package com lv queue import java util Scanner public class ArrayQueueDemo public static void main String ar
  • Unity重要知识点

    脚本生命周期 每当脚本被加载时调用一次 1 在Awake中做一些初始化操作 void Awake 初始化public成员 2 在每次激活脚步时调用 void OnEnable 在第一次调用Update之前调用一次Start 即使取消激活 再
  • 通过注册表永久更改cmd控制台的编码为65001

    1 Win R快捷键打开注册表输入regedit 2 路径填入 计算机 HKEY LOCAL MACHINE SOFTWARE Microsoft Command Processor 3 在右边窗口新建字符串值autorun 4 双击打开a
  • Pytest自动化测试框架

    fixture 特点 命令灵活 对于setup teardown可以省略 数据共享 在conftest py配置里写方法可以实现数据共享 不需要import导入 可以跨文件共享 scope的层次及神奇的yield组合相当于各种setup和t
  • win10 ping不通 Docker ip(解决截图)

    背景 win10下载了docker desktop就是这个图 然后计划做一个springboot连接docker docker部署springboot docker 部署springboot 成功 截图 總鑽風的博客 CSDN博客 问题 s
  • 区块链技术及应用概述

    一 基本概念 什么是区块链 区块链是一种以密码学方式保证的不可篡改和不可伪造的分布式账本 关键特点 去中心化 不可篡改性 匿名性 安全可信 区块链架构 1 数据层 主要描述区块链系统的物理形式 它是从Genesis区块开始的区块链链结构 包
  • Java学习笔记11

    API与String 什么是API String String的构造方法 String对象的特点 字符串的比较 获取字符串的字符 什么是API api是application programming interface 应用程序编程接口 S
  • AD20 如何更改标题栏?Altium Designer20 实用技巧系列教程(二)

    AD20 如何更改标题栏 Altium Designer20 实用技巧系列教程 二 视频地址 https www bilibili com video BV1kf4y117TH
  • C语言程序环境剖析——探究从.c到.exe之路

    程序环境 1 程序的翻译环境和执行环境 2 详解编译 链接 2 1 翻译环境 2 2 编译的三部分 预编译 编译 汇编 2 3链接 3 运行环境 1 程序的翻译环境和执行环境 在ANSI C的任何一种实现中 都存在两个不同的环境 翻译环境
  • JavaWeb —— AJAX

    目录 AJAX 基本介绍 A synchronous JavaScript And XML 多用在 1浏览器搜索联想 2用户注册中离开光标 校验数据的正确性 同步和异步的区别 AJAX快速入门 AJAX 基本介绍 A synchronous
  • Manjaro deepin 睡眠后无法唤醒

    最近尝试换了新的桌面 之前是xfce 使用deepin感觉很棒 也很好看 但是遇到下面一个问题 问题 因为我是双系统 因此经常会来回切win linux 但是发现换了deepin桌面后睡眠无法使用了 经常一睡就凉咯 无法唤醒 经过查找问题
  • Activity的四种启动模式和应用场景

    Activity的四种启动模式和应用场景 简介 通过设置ActivityManifestActivity launchMode可以设置Activity的启动模式 默认情况下 使用启动模式 standard 同时 launchMode可以通过
  • 算法编程6:连续子数组的最大和

    问题描述 输入一个整型数组 数组中的一个或连续多个整数组成一个子数组 求所有子数组的和的最大值 要求时间复杂度为O n 示例 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和最大 为 6