[leetcode] 53. 最大子数组和

文章目录

  • 题目描述
    • 解题方法
    • 分治法
      • java代码
      • 复杂度分析

题目描述

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组是数组中的一个连续部分。

示例 1:

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

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

进阶:如果你已经实现复杂度为 O ( n ) O(n) O(n) 的解法,尝试使用更为精妙的 分治法 求解。

解题方法

分治法

题目既然说了可以用分治法,那我就说一下具体思路。

顾名思义,分治法就是将大问题转化为若干个小问题。已知我们要求整个数组的最大和的连续子数组,那我们可以将这个问题转化为以下描述:我们先求出以每个位置为结尾的最大和的连续子数组, 则整个数组的最大和的连续子数组,就在这些值之中,我们只需要取其中的最大值,即可获得答案

我们可以发现以下规律:其实每个位置为结尾的最大和的连续子数组的取值,要么是以它上一个位置为结尾的最大和加上当前数字,要么就是当前数字,二者取其中的较大值即为答案

思路讲完了,那我们看下代码实现吧。

java代码

public int maxSubArray(int[] nums) {// 记录以当前位置为结尾的最大子数组和int curSum = nums[0];// 记录遍历过程中出现的子数组和最大值int result = nums[0];for (int i = 1; i < nums.length; i++) {curSum = Math.max(curSum + nums[i], nums[i]);result = Math.max(curSum, result);}return result;
}

复杂度分析

时间复杂度: O ( n ) O(n) O(n),需要遍历一次数组。
空间复杂度: O ( 1 ) O(1) O(1),只提供几个变量存储。


  • 个人公众号
    个人公众号
  • 个人小游戏
    个人小游戏

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

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

相关文章

如何应对MySQL单表数据量过大:垂直分表与水平分表策略解析

话接上回&#xff0c;单表最大数据建议两千万&#xff0c;那如果开发一个项目&#xff0c;预计注册量达到一个亿怎么办。 单表内放这么多数据&#xff0c;MYSQL底层B树的层级结构就可能会变得很高&#xff0c;磁盘io次数变多&#xff0c;性能会大幅度降低。所以考虑数据库分表…

解析CopyOnWrite机制 以java的CopyOnWriteArrayList为例

什么是CopyOnWrite 写时复制&#xff08;Copy-on-write&#xff0c;简称COW&#xff09;是读写分离的一种实现方式&#xff0c;因为读和写在不同的容器中。 核心思想&#xff1a;线程在修改数据的时&#xff0c;会将原数据复制一份&#xff0c;然后在副本上修改&#xff0c;最…

imx.7交叉编译libX11

背景&#xff1a; 还是之前提到的触摸屏无响应问题&#xff0c;通过GDB调试&#xff0c;发现APP并非人为代码卡死&#xff0c;而是卡在官方的libc.so.6中&#xff0c;这个库出现了一些错误。排除自己代码问题&#xff0c;就剩官方版本问题&#xff0c;移植X11库&#xff0c;或…

提高APP安全性的必备加固手段——深度解析代码混淆技术

​ APP 加固方式 iOSAPP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 iOSAPP 加固的具体实现方式。 混淆代码&#xff1a; 使用 ProGuard 工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难…

前端本地搭建gninx环境

nginx下载地址&#xff1a; https://nginx.org/en/download.html nginx下载后&#xff0c;解压即用&#xff0c;注意解压目录不要含中文 nginx常用命令 查看版本 nginx -v 开启nginx服务 start nginx 重启服务 nginx -s reload 关闭服务 nginx -s stopnginx目录简析

three.js能够实现的3D动画效果大阅兵,有图有真相。

three.js能够实现许多不同类型的3D交互动画&#xff0c;包括但不限于以下几种&#xff1a; 旋转和缩放&#xff1a;可以通过鼠标或触摸手势来旋转和缩放3D模型或场景。 序列动画&#xff1a;可以创建复杂的动画序列&#xff0c;包括移动、旋转、缩放、颜色变化等。 粒子效果&…

使用Flask部署ppocr模型_3

PaddleOCR环境搭建、模型训练、推理、部署全流程&#xff08;Ubuntu系统&#xff09;_1_paddle 多进程推理-CSDN博客 PP-Structure 文档分析-CSDN博客 接前两篇继续完成Flask部署 一、使用Flask部署ppocr模型 GET方法用于从服务器获取资源&#xff0c;即客户端向服务器请求数据…

单链表讲解

一.链表的概念以及结构 链表是一种物理结构上不连续&#xff0c;逻辑结构上连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构与火车是类似的&#xff0c;一节一节的&#xff0c;数据就像乘客一样在车厢中一样。 与顺序表不同的…

如何使用pytorch进行图像分类

如何使用pytorch进行图像分类https://featurize.cn/notebooks/5a36fa40-490e-4664-bf98-aa5ad7b2fc2f

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图&#xff08;Use Case Diagram&#xff09;。2.展现了一组用例、参与者&#xff08;Actor&#xff09;以及它们之间的关系。3.用例图通常包括以下的内容&#xff1a;用例、参与者、用…

配置IP地址并验证连通性

1.实验环境 主机 A和主机 B通过一根网线相连&#xff0c;如图6.13所示。 图6.13 实验案例一示意图 2.需求描述 为两台主机配置!P地址&#xff0c;验证P地址是否生效&#xff1b;验证同一网段的两台主机可以互通&#xff0c;不同网段的主机不能直接互通。 3.推荐步骤 为两台…

uni原生导航栏相关设置

动态设置某一项内容 使用场景&#xff1a;不同角色显示不同导航栏或设置不同名称&#xff0c;不同图标 API: uni.setTabBarItem(OBJECT) 属性类型默认值必填说明indexnumber无是tabBar的哪一项&#xff0c;从左边算起&#xff08;从0开始&#xff09;textString无否tab上的按…

【Linux】封装一下简单库 理解文件系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、封装一下简单库 二、理解一下stdin(0)、stdout(1)、stderr(3) 2.1、为什么要有0、1、2呢&#xff1f; 2.2、特点 2.3、如果我想让2也和1重定向到一个文件…

uni-app 微信小程序设置全局转发给朋友、分享到朋友圈

小程序右上角原生菜单自带的分享按钮&#xff0c;默认不可用 1.创建一个mixin share.js export default {created() {//#ifdef MP-WEIXINwx.showShareMenu({withShareTicket: true,menus: [shareAppMessage, shareTimeline]});//#endif}, }export default {created() {//#ifde…

vs2022断点调试怎么看堆栈帧,找异常位置

打一个断点以后&#xff0c;会出现如图报错 我们要怎么找到报错的语句&#xff1f;鼠标点击->堆栈帧->上一行运行的位置->直到找到错误出错如图所示&#xff1a; 跳转到&#xff0c;我们手写的代码&#xff0c;执行出错的位置

Unity | Shader基础知识(第十二集:颜色混合)

目录 前言 一、日常生活中的常见现象 二、unity自带的一个结构体&#xff08;表面着色器SurfaceOutputStandard&#xff09; 三、自己写一个颜色混合的Shader 1.只加基础颜色Albedo 2.加入法线 3.加入光滑度 4.加入金属度 5.加入自发光 四、作者的话 前言 shader里每一…

docker安装nessus服务及使用

Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件&#xff0c;现在软件服务越来越多&#xff0c;越来越复杂&#xff0c;涉及的数据也更多&#xff1b;因此系统完成后对于系统漏洞的检测并对其进行修改十分有必要&#xff0c;本文介绍通过docker安装nessus服务及简单的使…

设计模式-模板方法模式(TemplateMethod)

1. 概念 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义算法的骨架&#xff0c;将一些步骤延迟到子类中实现。 2. 原理结构图 2.1 图 2.2 角色 抽象类&#xff08;Abstract Class&#xff09; 定义抽象的基本操作&#xff08;Primitive Operations&#xff…

从启发式到模型化 京东推荐广告排序机制演化

1、序言&#xff1a;广告排序机制的前世今生 1.1、简介&#xff1a;广告排序机制 在线广告是国内外各大互联网公司的重要收入来源之一&#xff0c;而在线广告与传统广告最大的区别就在于其超大规模的实时竞价环境&#xff1a;数以万计的广告主在一天内可以参与亿级别的流量竞…

解决宝塔的FTP无法使用被动模式

问题&#xff1a;宝塔安装完ftp管理软件之后&#xff0c;无法使用被动模式连接 解决&#xff1a; 提示&#xff1a; 如果还是不行&#xff0c;那么要看看防火墙和安全组有没有放行被动模式的端口&#xff0c;宝塔安装的pure-ftpd软件的被动模式端口默认是39000至400…