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

LeetCode算法日记 - Day 81: 最大子数组和

目录

1. 最大子数组和

1.1 题目解析

1.2 解法

1.3 代码实现


1. 最大子数组和

https://leetcode.cn/problems/maximum-subarray/description/

给你一个整数数组 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

1.1 题目解析

题目本质
在一维数组中找到和最大的连续子序列,本质是"连续区间求和的最优选择"问题。

常规解法
枚举所有可能的子数组(双重循环确定起点和终点),计算每个子数组的和,取最大值。

问题分析
暴力枚举需要 O(n²) 时间复杂度(或 O(n³) 如果求和也用循环),当数组长度达到 10⁵ 时会超时。关键问题是存在大量重复计算——每次都从头累加子数组的和。

思路转折
要想高效 → 必须避免重复计算 → 动态规划。核心洞察:当遍历到位置 i 时,只需要决定"是接上前面的子数组"还是"从当前位置重新开始"。这样可以在 O(n) 时间内完成,因为每个位置只需要依赖前一个位置的状态。

1.2 解法

算法思想:定义 dp[i] 表示以 nums[i] 结尾的最大子数组和。

递推公式:dp[i] = max(dp[i-1] + nums[i], nums[i])

含义:要么延续前面的子数组(加上当前元素),要么放弃前面的(从当前元素重新开始)。

步骤拆解

i)初始化 DP 数组,dp[0] 设为一个极小值作为哨兵

ii)遍历数组,对每个位置 i 计算 dp[i] = max(dp[i-1] + nums[i-1], nums[i-1])

iii)遍历 DP 数组找到最大值并返回

易错点

  • 初始化问题:dp[0] 和 cur 不能设为 0,因为数组可能全是负数。使用 Integer.MIN_VALUE/2 避免加法溢出

  • 索引偏移:代码中 dp 数组长度为 m+1,dp[i] 对应 nums[i-1],需要注意下标映射

  • 最终结果:不是返回 dp[m],而是返回整个 DP 数组中的最大值,因为最大子数组可能在任意位置结束

1.3 代码实现

class Solution {public int maxSubArray(int[] nums) {int m = nums.length;int[] dp = new int[m + 1];dp[0] = Integer.MIN_VALUE / 2;  // 哨兵,避免溢出// 计算以每个位置结尾的最大子数组和for (int i = 1; i <= m; i++) {dp[i] = Math.max(dp[i-1] + nums[i-1], nums[i-1]);}// 找出所有位置中的最大值int cur = Integer.MIN_VALUE / 2;for (int i = 1; i <= m; i++) {cur = Math.max(cur, dp[i]);}return cur;}
}

复杂度分析

  • 时间复杂度:O(n),两次遍历数组

  • 空间复杂度:O(n),使用了 DP 数组。可优化至 O(1),因为每次只需要前一个状态

http://www.dtcms.com/a/520333.html

相关文章:

  • 商城网站方案加强局网站建设报告
  • 开源OpenXR引擎:Monado XR Runtime开发配置及关键模块说明(可用于自研VRAR眼镜设备或pico、queset等量产设备)
  • 创业公司做网站建设网站需要什么设施?
  • 5 倍性能优于开源版,火山 Milvus 集成 DiskANN+RaBitQ
  • saas建站系统是怎么实现的浦江做网站
  • [Java数据结构和算法] HashMap 和 HashSet
  • 什么是跨境电商主要做什么女生seo专员很难吗为什么
  • R语言数据结构与数据处理基础内容
  • 求下列线性变换的矩阵
  • iOS 打包 IPA 全流程详解,签名配置、工具选择与跨平台上传实战指南
  • 前端代码规范:husky+ lint-staged+pre-commit
  • 房地产公司网站源码图片数量 wordpress
  • Qt-UDP
  • Ethernet/ip 转 Modbus RTU 驱动,罗克韦尔 PLC 与华为逆变器打造光伏电站智能监控典范
  • 与创新者同频!与FlagOS共赴开源之约
  • 【C++学习】函数及分文件编写
  • 网站免费推广计划新闻视频网站开发
  • 推进网站集约化建设的作用易企秀h5页面怎么制作
  • 2025年--Lc209- 75. 颜色分类(排序)--Java版
  • 郑州网站维护推广西安网站建设管理
  • 为 Claude Code CLI 提供美观且高度可定制的状态行,具有powerline support, themes, and more.
  • 第156期 适用于RAG的最佳开源嵌入模型 多语言自然语言处理及阿拉伯语文本的高性能开源嵌入模型
  • 公司网站建设需要哪些方面土地流转网站开发
  • Grafana监控可视化
  • GEO数据分析与效果归因:GEO 效果的多维度分析框架
  • 31.stream数据类型应用
  • 蓝牙协议6.1
  • 微服务中的服务熔断、降级与限流
  • 查网站的建站系统百度搜索网站图片
  • 网站界面风格设计描述网站类网站开发犯罪吗