【力扣】53. 最大子数组和
发布人:shili8
发布时间:2025-01-14 23:55
阅读次数: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: 最大子数组的和。 """ # 初始化最大子数组和为负无穷 max_sum = float('-inf') # 初始化当前子数组和为0 current_sum =0 # 遍历数组 for num in nums: # 将当前数字添加到当前子数组中 current_sum += num # 更新最大子数组和 max_sum = max(max_sum, current_sum) # 如果当前子数组和为负,重置它 if current_sum < 0: current_sum =0 # 返回最大子数组的和 return max_sum# 测试用例print(maxSubArray([-2, -3,4, -1, -2,1,5, -3])) # 输出:7print(maxSubArray([1])) # 输出:1print(maxSubArray([-1, -2, -3, -4, -5])) # 输出:-1
**注释**
* `max_sum` 变量用于存储最大子数组的和。
* `current_sum` 变量用于存储当前子数组的和。
* 遍历数组时,当前数字被添加到当前子数组中,并更新最大子数组和。
* 如果当前子数组和为负,则重置它,以避免出现负数。
**时间复杂度**
该算法的时间复杂度为 O(n),其中 n 是数组的长度。因为我们只遍历数组一次,进行常数数量的操作。
**空间复杂度**
该算法的空间复杂度为 O(1),因为我们只使用常数数量的额外空间来存储最大子数组和和当前子数组和。