图解LeetCode——剑指 Offer 42. 连续子数组的最大和

news2025/7/18 16:08:10

一、题目

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

二、示例

2.1> 示例1:

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

提示:

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100

三、解题思路

根据题目描述,在一个有整数和负数的数组nums中,求得所有的子数组的和的最大值。那么,第一个解题思路就是:

首先】计算出所有子数组;
然后】计算每个子数组中的总和,再将最大的总和作为结果返回;

但是,这种解题方法时间复杂度会很高。那么,有没有更简单的解题思路呢?那么我们可以通过动态规划来解决这道题。首先,我们定义一个变量,即:preSum,用来表示以nums[i]为末尾的所有子数组中最大的总和。我们通过遍历nums数组中的每个元素,来依次计算preSum的值,那么最大的值也就是这道题的答案了。

在对比过程中,有如下逻辑:

情况1】如果nums[i]的值大于它前一个元素i-1的preSum的值,并且该preSum值小于0,则i位置的preSum就是nums[i]
情况2】否则,位置i的preSum值就等于nums[i] + 元素i-1的preSum的值

为了方便理解,我们以输入:nums=[-2,1,-3,4,-1]为例,看一下具体的执行过程是怎么样的,具体图例请见如下所示:

四、代码实现

class Solution {
    public int maxSubArray(int[] nums) {
        int preSum = nums[0], result = preSum;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] > preSum && preSum < 0) preSum = nums[i];
            else preSum += nums[i];
            result = Math.max(result, preSum);
        }
        return result;
    }
}

 今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鉴源论坛 · 观擎丨民机机载软件中的开发和验证工具

作者 |蔡喁 上海控安可信软件创新研究院副院长 版块 | 鉴源论坛 观擎 01 工具鉴定 现代软件工程中&#xff0c;工具已经出现在软件研制过程中的各个环节中。在常见的软件研制环节中&#xff0c;使用工具包括软件需求工具、软件设计工具、软件架构工具和软件测试工具等。这…

【C++】模板与STL库

STL&#xff08;标准模板库&#xff09; 文章目录模板STL模板 模板是泛型编程的基础&#xff0c;泛型编程以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器&#xff0c;比如迭代器和算法&#xff0c;都是泛型编程的例子&#xff0c;它们…

线性判别分析仅在线性可分数据上能获得理想结果

Q: 线性判别分析仅在线性可分数据上能获得理想结果, 试设计一个改进方法, 使其能较好地用于飞线性可分数据 The same for “Linear discriminant analysis can only obtain ideal results on linearly separable data. Try to design an improved method to make it better us…

Vue3:自定义指令以及简单的后台管理权限封装

目录 前言&#xff1a; 自定义指令介绍&#xff1a; 局部的自定义指令&#xff1a; 全局自定义指令&#xff1a; 讲讲后台管理权限管理&#xff1a; 前言&#xff1a; 说起这个自定义指令的使用场景&#xff0c;我第一反应就是&#xff0c;后台管理的权限管理&#xff0c;要…

VBA学习——1

VBA 过程的基本语法如下&#xff1a; Sub 过程名(参数)语句1语句2...End SubVBA 函数与 VBA 过程很相似&#xff0c;除了使用的关键词外&#xff0c;主要区别是&#xff0c;函数可以返回值。 Function [函数名]([参数]) As [返回值类型]语句1 语句2 ... 语句n [函…

Servlet笔记(9):Cookie处理

一、Cookies处理 1、Cookies概念 Cookies是存储在客户端计算机上的文本文件&#xff0c;并保留各种跟踪信息。 识别返回用户的三个步骤 服务器脚本向浏览器发送一组Cookies。例如姓名、年龄或识别号码等。浏览器将这些信息存储在本地计算机上。当下一次浏览器向Web服务器发送…

SSM+HTML搭建(小白教学)

最近做项目,觉得还是有意义记录以下前后端框架是怎么搭建的,今天给大家介绍介绍SSM:SpringBootSpringMVCMyBatis后端搭建:SpringBoot快速搭建的网站(Spring Initializr)选择创建之后,会下载到一个zip压缩包,对压缩包进行解压(包地址一般选择后端项目的放的文件夹中)用idea打开项…

每日学术速递2.24

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.BUAA_BIGSCity: Spatial-Temporal Graph Neural Network for Wind Power Forecasting in Baidu KDD CUP 2022 标题&#xff1a;BUAA_BIGSCity&#xff1a;百度KDD CUP 2022风电预测…

警惕!黑客正疯狂实施网络攻击,网站该如何防范?

自2021年以来&#xff0c;ATW组织宣称披露涉我国重要信息系统源代码、数据库等敏感信息70余次&#xff0c;涉及国家重要政府部门、航空、基础设施等100余家单位的300余个信息系统&#xff0c;尤其2022年以来&#xff0c;ATW组织滋扰势头加剧&#xff0c;持续对中国的网络目标实…

数据结构预算法之买股票最好时机动态规划(可买卖多次)

一.题目二.思路在动规五部曲中&#xff0c;这个区别主要是体现在递推公式上&#xff0c;其他都和上一篇文章思路是一样的。所以我们重点讲一讲递推公式。这里重申一下dp数组的含义&#xff1a;dp[i][0] 表示第i天持有股票所得现金。dp[i][1] 表示第i天不持有股票所得最多现金如…

【Http1.0和Http1.1的区别?Http1.1和Http2.0的区别?】

计算机网络面试的相关知识你可不能不知道呀&#xff01;Http1.0和Http1.1的区别&#xff1f;Http1.1和Http2.0的区别&#xff1f; Http1.0和Http1.1的区别&#xff1f; 连接方式 : HTTP 1.0 为短连接&#xff0c;HTTP 1.1 支持长连接。状态响应码 : HTTP/1.1中新加入了大量的状…

小型水库大坝安全监测的主要对象

一、监测背景 大坝监测的目的分成两个大的方面&#xff0c;一方面是为了验证设计、指导施工、为科研提供必要的资料&#xff1b;另一方面&#xff0c;也可以说是更重要的方面&#xff0c;就是为了长期监视大坝的安全运行。因此&#xff0c;一个成功的监测设计者不仅要能充分领会…

Vmware 虚拟机无法联通主机

问题描述&#xff1a;今天使用Vmware Workstation 创建CentOS-7 虚拟机&#xff0c;基于CentOS-7 搭建Hadoop3 伪分布式版本&#xff0c;CentOS-7 测试Hadoop 3 服务正常启动&#xff0c;通过主机连接Hadoop 3的管理平台&#xff0c;提示如下错误信息&#xff1a;尝试解决办法&…

Android---Handler 源码解析

在 android 开发中&#xff0c;经常会在子线程中进行一些操作&#xff0c;当操作完后会通过 handler 发送一些数据给主线程&#xff0c;通知主线程做响应的操作。原理&#xff1a;子线程 handler 主线程&#xff0c;其实构成了线程模型中的经典问题&#xff0c;生产者-消费者模…

HHDESK文本对比功能

对比文件夹和图片而言&#xff0c;文本的更改更加频繁且琐碎&#xff1b;个别词语的更改更是让人“健忘”。 如果有一款工具能够直观的对文本进行对比&#xff0c;并且清晰的划分显示&#xff0c;那么便可以大量节约办公人员的精力和时间。 1 文本对比功能简介 版本更新&…

Ubuntu20.04配置深度学习环境

Ubuntu20.04配置深度学习环境 对于一台新Ubuntu20.04主机&#xff0c;想要直接进行深度学习模型的训练&#xff0c;需要进行一些常规配置。本文针对的情况包括物理机和虚拟机。安装部分本文不介绍&#xff0c;只介绍配置环境部分。 1. 安装中文输入法 参考如下博客&#xff…

Web安全最详细学习路线指南,从入门到入职(含书籍、工具包)

在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发 安全研究&#xff1a;二进制方向 安全研究&#xff1a;网络渗透方向 下面逐一说明一下. 第一个方向&#xff1a;安全研发 你可以把网络安全理解成电商行业、教育行业等其他行业一样&#x…

《卓有成效的管理者》系列-总结篇

作者【美】彼得-德鲁克简介书中提到&#xff0c;每一位知识工作者其实都是管理者&#xff0c;而且卓有成效是每个管理者必须做到的事。书中认为所有负责行动和决策而且能够提高机构工作效率的人&#xff0c;都应该像管理者一样工作和思考。而且&#xff0c;一位卓有成效的管理者…

自考都有哪些科目?怎么搭配报考?

第一次自考科目搭配 先报理论课&#xff0c;熟悉学习和考试套路 参考搭配模式&#xff1a; 一、全报考公共课 公共课难度较低&#xff0c;通过率高&#xff0c;复习起来比较轻松。对于不确定考什么专业&#xff0c;后期想换专业的同学&#xff0c;考过公共课&#xff0c…

记一次Binder内存不足导致的应用被杀

每个进程的可用Binder内存大小是 1M-8KB 也就是900多KB 事情的起因的QA压测过程发生进程号变更&#xff0c;怀疑APP被杀掉过&#xff0c;于是开始看日志&#xff08;实际后来模拟的时候可以发现app确实被杀掉了&#xff09; APP的压测平台会上报进程号变更时间点&#xff0c;发…