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

[面试精选] 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)。

相关文章:

  • 小土堆pytorch--优化器
  • uniapp-商城-71-shop(4-商品列表,详情页中添加商品到购物车的处理)
  • 2025年燃气从业人员考试题库及答案
  • Java高频面试之并发编程-21
  • Composer 常规操作说明与问题处理
  • 遥控系统实时响应方案科普:事件触发(0/1) vs. 心跳轮询
  • Vue条件渲染
  • 【Webtrees 用户手册】第 2 章 - 访客须知
  • 特征分解:线性代数在AI大模型中的核心工具
  • 使用VuePress开发日志
  • 网络流学习笔记(基础)
  • python_入门基础语法(2)
  • vue3自定义指令来实现 v-lazyImg 功能
  • [java]eclipse中windowbuilder插件在线安装
  • 前端大文件分片上传与断点续传方案
  • 将docker数据目录迁移到 home目录下
  • 系统架构中的限流算法(一)
  • Prompt Tuning:优化提示调优全攻略
  • vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
  • ai学习--python部分-1.变量名及命名空间的存储
  • 在什么网站上查建设机械操作证/站长之家域名查询
  • 做网站找不到客户/腾讯企点是干嘛的
  • 网站推广团队/网站推广软件哪个最好
  • 网站外链建设周期/百度热搜关键词排名优化
  • 网站建设淘宝客/百度的网址怎么写
  • 斜杠广场直播基地骗子/优优群排名优化软件