当前位置: 首页 > article >正文

[面试精选] 0053. 最大子数组和

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


53. 最大子数组和 - 力扣(LeetCode)

2. 题目描述


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

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

3. 题目示例


示例 1 :

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

示例 2 :

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

4. 解题思路


  1. 问题理解
    • 给定一个整数数组 nums,需要找到一个连续子数组,使得其和最大,并返回这个最大和。
  2. 关键思路
    • 动态规划:使用动态规划的思想,通过遍历数组,逐步计算以当前元素结尾的最大子数组和。
    • 状态转移:对于当前元素 nums[i],如果前面的子数组和 nums[i-1] 大于0,则将其加到 nums[i] 上,否则从 nums[i] 重新开始计算子数组和。
  3. 算法流程
    • 初始化最大和 res 为数组的第一个元素。
    • 从第二个元素开始遍历数组:
      • 更新 nums[i]nums[i] + max(nums[i-1], 0),即如果前面的子数组和对当前元素有增益效果,则加上前面的子数组和。
      • 更新 res 为当前最大值。
    • 返回 res

5. 题解代码


class Solution {public int maxSubArray(int[] nums) {// 初始化结果为数组的第一个元素int res = nums[0];// 从第二个元素开始遍历数组for(int i = 1; i < nums.length; i++){// 当前元素的值加上前一个元素的值(如果前一个元素的值大于0)// 这相当于判断是否要延续前面的子数组nums[i] += Math.max(nums[i-1], 0);// 更新结果为当前最大值res = Math.max(res, nums[i]);}// 返回最大子数组和return res;}
}

6. 复杂度分析


  1. 时间复杂度
    • 遍历数组一次,时间复杂度为 O(n),其中 n 是数组的长度。
  2. 空间复杂度
    • 在原数组上进行修改,没有使用额外的空间,空间复杂度为 O(1)。
http://www.lryc.cn/news/2386925.html

相关文章:

  • 怎么判断一个Android APP使用了Cordova这个跨端框架
  • PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点
  • VisionPro 与 C# 联合编程:相机连接实战指南
  • 鸿蒙OSUniApp 实现动态的 tab 切换效果#三方框架 #Uniapp
  • Docker系列(三):深度剖析Dockerfile与图形化容器实战 --- 3种容器构建方法对比与性能调优
  • 论文阅读:Next-Generation Database Interfaces:A Survey of LLM-based Text-to-SQL
  • OS面试篇
  • FFMPEG-FLV-MUX编码
  • 青少年编程与数学 02-020 C#程序设计基础 05课题、数据类型
  • React vs Vue.js:选哪个框架更适合你的项目?
  • Kafka|基础入门
  • ADS学习笔记(五) 谐波平衡仿真
  • MySQL存储引擎对比及选择指南
  • 【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号
  • PETR- Position Embedding Transformation for Multi-View 3D Object Detection
  • Prompt Tuning与自然语言微调对比解析
  • 二十七、面向对象底层逻辑-SpringMVC九大组件之HandlerAdapter接口设计
  • QT软件开发环境及简单图形的绘制-图形学(实验一)-[成信]
  • 项目部署一次记录
  • 单例模式,饿汉式,懒汉式,在java和spring中的体现
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • 【Redis】第1节|Redis服务搭建
  • 数据结构第5章 树与二叉树(竟成)
  • # 深入解析BERT自然语言处理框架:原理、结构与应用
  • ai学习--python部分-1.变量名及命名空间的存储
  • Cadence学习笔记之---PCB过孔替换、封装更新,DRC检查和状态查看
  • Java基础 Day21
  • 系统开发和运行知识
  • Elasticsearch 分片驱逐(Shard Exclusion)方式简析:`_name`、`_ip`、`_host`
  • 【C++高级主题】异常处理(四):auto_ptr类