LeetCode题解——42.连续子数组的最大和(动态规划思想)

2023-11-03

题目地址:剑指 Offer 42. 连续子数组的最大和 - 力扣(LeetCode)

一.解题思路 

在这道题中,数组连续是一个很重要的信息。我们可以创建一个数组用于记录每一位对应的最大值。

所谓每一位的最大值,意思就是以这一位为结尾的数组的最大值。那么我们可以利用动态规划的思想完成解题。

因为题目要求连续,所以当前位的最大值要么是与上一位最大值之和,要么就是本身的值

画图举例说明一下:

 从下标0处出发,该下标处没有前一位,因此-2所对应最大值即本身。

 下标1对应值为1,与前一位最大值-2相加为-1,是小于本身值的,因此下标1处最大值为1。

 同理,下标2处: -3 + 1 = -2 > -3,因此最大值为-2。

按上述推导,我们在最大值数组中找到的最大值即是答案。

二.代码实现

这份代码中,并没有使用最大值数组。因为实际上我们只需记录前一位存储的最大值以及目前为止的最大值。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max = nums[0], prevsub_max = max;
        for(int i = 1; i < nums.size(); i++)
        {
            if(prevsub_max + nums[i] > nums[i]) prevsub_max += nums[i];
            else prevsub_max = nums[i];
            if(prevsub_max > max) max = prevsub_max;
        }
        return max;
    }
};

每名程序员都是作家——Sercan Leylek


如有错误,敬请斧正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode题解——42.连续子数组的最大和(动态规划思想) 的相关文章

  • MySQL数据库增删改查

    前言 MySQL准确来说是一款开源关系型数据库管理系统 支持多种数据库类型 包括整型 字符型 日期 时间型等 它还支持BLOB 二进制大对象 和文本类型 使得存储各种类型的数据变得更加便捷 平时工作中主要操作无非是增删改查 本文将通过Nav
  • c++学习之虚析构和纯虚析构

    1 多态使用时 如果子类中有属性开辟到堆区 那么父类指针在释放时无法调用子类的析构代码 解决方法 将父类中的析构函数改为虚析构或者是纯虚析构 2 虚析构和纯虚析构共性 1 都可以解决父类指针无法释放子类对象的问题 2 都需要有具体的函数实现
  • vue.js水平时间轴_用Vue.js制作的简单水平时间轴组件

    vue js水平时间轴 Vue水平时间线 Vue Horizontal Timeline a simple horizontal timeline component made with Vue js 一个由Vue js制作的简单水平时间轴
  • happens-before原则与内存屏障

    1 happens before原则定义 编译器和处理器会对我们程序优化而进行指令重排 但需要保证前一个操作结果对后一个依赖操作可见 其实只是在单线程下能保证 否则就禁止指令重排 1 1 指令重排带来的问题 虽然指令重排满足happens
  • Angular 1.0 入门指南

    Angular 1 0 入门指南 1 angular 1 0 特点 数据双向绑定MVVM 隔离作用域 2 Angular 的作用域 scope scope rootScope 先来看一下 angular 的一般使用格式 作用域定义 模块注入
  • 解析最全的 Aspose.Words功能介绍,看这篇就够了

    Aspose Words 为用户提供了广泛的功能 用户可以执行大量与文档相关的任务 从简单地将文档从一种受支持的格式转换为另一种格式并在转换过程中修改这些文档到业务任务 例如创建结构化和视觉上吸引人的文档或自动报告 现代文档格式和标准很复杂
  • nslookup DNS 域名解析 故障排除

    nslookup是一个可以监测DNS服务器是否正常运行 且是否能正确解析域名的工具 参考文章 http www t086 com article 5138 常用方法 nslookup 某一域名A 服务器 正在工作的DNS服务器主机名 Add
  • 如何使用Jar命令将指定文件夹打包成Jar包

    一 场景描述 通常我们在进行项目开发的时候都会使用很多第三方封装的依赖 那么有时候团队内部也会编写一些工具类需要打包成Jar包供其他团队或项目使用 本文主要介绍如果使用jar命令打包指定文件夹下的文件 生成非可执行Jar包 二 Jar命令
  • JavaWeb笔记——JDBC

    1 JDBC综述 在开发中我们使用的是java语言 那么势必要通过java语言操作数 据库中的数据 这就是接下来要学习的JDBC 一套标准接口 1 SQL语句是操作数据库的唯一手段 容易犯错误的几个认知 Navicat与MySQL的关系 前
  • 中移链(基于EOS)DDC-SDK实战-如何集成中移链DDC-SDK

    本文档是关于中移链 DDC SDK 实战 即如何集成基于 EOS 的中移链 DDC SDK 的操作指南 适用于 BSN 开放联盟链 中移链 DDC SDK 开发者 帮助读者了解如何以平台方的角色集成中移链 DDC SDK 前言 2021年1
  • 7--归并排序

    思想 将待排序序列分为两个子序列 再将两个子序列递归的继续分下去 直到序列有序 即序列中只有一个元素 再把所有有序子序列逐层合并为一个整体有序序列 每次合并是将两个有序表合并成一个有序表 图示 具体实现 把待排序序列分为两个子序列 然后让子
  • CUDA中的常量内存__constant__

    GPU包含数百个数学计算单元 具有强大的处理运算能力 可以强大到计算速率高于输入数据的速率 即充分利用带宽 满负荷向GPU传输数据还不够它计算的 CUDA C除全局内存和共享内存外 还支持常量内存 常量内存用于保存在核函数执行期间不会发生变
  • 华为OD机试真题 Python 实现【股票最大收益】

    题目 假设知道某段连续时间内股票价格 计算通过买入卖出可获得的最大收益 输入一个大小为 n的数组price p1 p2 p3 pn pi是第i天的股票价格 pi的格式的格式为股票价格 非负整型 加上货币单位Y或者S 其中Y代表人民币 S代表
  • 模块化( export、import)

    模块化 模块化是指将一个大的程序文件 拆分成许多小的文件 然后将小文件组合起来 模块化的好处 模块化的优势有以下几点 1 防止命名冲突 2 代码复用 3 高维护性 模块化规范产品 ES6 之前的模块化规范有 1 CommonJS gt No
  • Windodws 常用dos命令

    r目录 1 打开黑窗口 1 1 正常打开黑窗口 2 2 管理员方式打开黑窗口 2 黑窗口常用命令总结 2 1 打开工具 2 2 操作计算机 2 3 查看计算机信息 补充 1 打开黑窗口 1 1 正常打开黑窗口 Win R 输入 cmd 可以

随机推荐