【LeetCode刷题】最大子数组和

给你一个整数数组 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 <=
  • -104 <= nums[i] <=

解法思路

  1. 状态定义 :用 current_max 表示 "以当前元素结尾的最大子数组和"。
  2. 状态转移 :对于第 i 个元素,有两种选择:
    • 仅保留当前元素(前面的子数组和为负,不如重新开始);
    • 将当前元素加入前面的子数组(前面的子数组和为正,能增加当前和)。因此状态转移方程为:current_max = max(nums[i], current_max + nums[i])
  3. 全局最大值 :用 global_max 记录遍历过程中所有 current_max 的最大值,即为最终结果。

Python代码:

python 复制代码
from typing import List


class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 初始化:当前子数组和、全局最大和均为第一个元素(子数组至少含一个元素)
        current_max = global_max = nums[0]

        # 遍历数组(从第二个元素开始)
        for num in nums[1:]:
            # 更新"以当前元素结尾的最大子数组和"
            current_max = max(num, current_max + num)
            # 更新全局最大和
            global_max = max(global_max, current_max)

        return global_max


# 测试用例验证
if __name__ == "__main__":
    solution = Solution()
    # 示例1
    print(solution.maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4]))  # 输出:6
    # 示例2
    print(solution.maxSubArray([1]))  # 输出:1
    # 示例3
    print(solution.maxSubArray([5, 4, -1, 7, 8]))  # 输出:23

LeetCode提交代码:

python 复制代码
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        from typing import List
        # 初始化:当前子数组和、全局最大和均为第一个元素(子数组至少含一个元素)
        current_max = global_max = nums[0]
        
        # 遍历数组(从第二个元素开始)
        for num in nums[1:]:
            # 更新"以当前元素结尾的最大子数组和"
            current_max = max(num, current_max + num)
            # 更新全局最大和
            global_max = max(global_max, current_max)
        
        return global_max
        

程序运行截图展示:

总结

本文介绍了求解最大子数组和问题的动态规划解法。通过定义current_max表示以当前元素结尾的最大子数组和,状态转移方程为current_max = max(numsi, current_max + numsi)。同时维护全局最大值global_max记录最大结果。Python实现中初始化current_max和global_max为第一个元素,遍历数组更新这两个值,最终返回global_max。示例验证了该方法的正确性,时间复杂度为O(n),空间复杂度为O(1)。

相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
m0_547486662 天前
《数据结构教程》全套 PPT课件2026
数据结构