[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,一经查实,立即删除!

相关文章

数据结构与算法——21.哈希表

这篇文章我们来学习哈希表。 1.什么是哈希表 下面来看一下哈希表 目录 1.什么是哈希表 1.1前言 1.2哈希表的介绍 2.哈希表的实现 1.1前言 在学习什么是哈希表之前&#xff0c;我们先来看下面在这一种情况。 我这里有一堆数据&#xff0c;我给每个数据上一个编号&#x…

如何应对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;最…

Macbook M3新机器安装cocoapods失败

这个问题昨天困扰了一个下午 中午拿到的全新的m3 2024 MacBook air&#xff0c;操作系统是Sonoma 14.3 安装Android studio与Flutter一切顺利 在安装cocoapods的时候&#xff0c; sudo gem install cocoapods 一直失败&#xff0c;开始是提示timeout&#xff0c;后来想办法…

一文读懂工作流原理及其在多元应用场景下的实践

一文读懂工作流原理及其在多元应用场景下的实践 引言工作流原理概述应用场景示例及详细描述1. 人力资源招聘流程2. 项目管理流程3. 财务报销审批流程4. 合同审核签署流程 总结 引言 工作流&#xff08;Workflow&#xff09;&#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;数据就像乘客一样在车厢中一样。 与顺序表不同的…

线程池中核心线程数与最大线程数与缓冲任务队列的关系?

在Java中的线程池&#xff08;如ThreadPoolExecutor&#xff09;中&#xff0c;核心线程数&#xff08;corePoolSize&#xff09;、最大线程数&#xff08;maximumPoolSize&#xff09;以及缓冲队列&#xff08;workQueue&#xff09;之间存在着密切的关系&#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…

Linux学习 - 常用和不太常用的实用awk命令

Linux学习 - 常用和不太常用的实用awk命令 Linux学习系列文章是生信宝典最开始主推的一块&#xff0c;力图从一个新额视角帮助初学者快速入门Linux系统&#xff0c;熟悉Linux下的文件和目录&#xff0c;文件操作&#xff0c; 文件内容操作。而且教程摒弃了完美操作&#xff0c…

immutable variables, constants的区别(rust)

let immutable_variable 1590865; //不可变变量 const constant_variable 0096; //常量常量、不可变变量一样&#xff0c;都无法更改变量的值&#xff0c;但是常量和不可变变量之间存在以下区别&#xff1a; 不可变变量默认不可变&#xff0c;编译器会进行检查。常量不仅在默…