Killing LeetCode [53] 最大子数组和
发布人:shili8
发布时间:2024-12-26 04:37
阅读次数:0
**最大子数组和**
**题目描述**
给定一个整数数组 `nums`,找到其中最大的连续子数组的和。
**示例1**
输入:`[-2, -3,4, -1, -2,1,5, -3]`
输出:`7`
解释:最大子数组为 `[4, -1, -2,1,5]`,其和为 `7`。
**示例2**
输入:`[1]`
输出:`1`
解释:最大子数组为 `[1]`,其和为 `1`。
**示例3**
输入:`[-1, -2, -3, -4, -5]`
输出:`-1`
解释:最大子数组为 `[-1]`,其和为 `-1`。
**解决方案**
我们可以使用动态规划来解决这个问题。动态规划是一种将原问题分解成多个子问题的方法,然后求解这些子问题以找到原问题的答案。
**代码实现**
def maxSubArray(nums): """ 找到最大子数组和 Args: nums (list): 整数数组 Returns: int: 最大子数组和 """ # 初始化最小值和当前最大值 min_val = float('inf') curr_max =0 # 遍历数组 for num in nums: # 更新当前最大值 curr_max = max(num, curr_max + num) # 更新最小值 min_val = min(min_val, curr_max) return curr_max
**注释**
* `min_val` 变量用于存储当前子数组的最小和。
* `curr_max` 变量用于存储当前最大子数组的和。
* 遍历数组时,我们更新 `curr_max` 和 `min_val` 的值,以确保它们始终代表当前子数组的最大和和最小和。
**示例用法**
# 测试案例1nums = [-2, -3,4, -1, -2,1,5, -3] print(maxSubArray(nums)) # 输出:7# 测试案例2nums = [1] print(maxSubArray(nums)) # 输出:1# 测试案例3nums = [-1, -2, -3, -4, -5] print(maxSubArray(nums)) # 输出:-1
**总结**
最大子数组和问题可以使用动态规划来解决。我们通过遍历数组并更新当前最大值和最小值来找到最大子数组的和。该算法的时间复杂度为 O(n),其中 n 是数组长度。