#10 困难

题目描述

给定一个整数数组,找出一个连续子数组(包含至少一个元素),使其和最大,返回这个最大和。

示例

输入:nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]

输出:6(子数组 [4, -1, 2, 1] 的和最大)

提示

使用 Kadane 算法:维护一个当前子数组和 current_sum 和一个最大和 max_sum。当 current_sum 变为负数时,重新开始计算。

参考答案

def max_sub_array(nums):
    """最大子数组和(Kadane 算法)"""
    if not nums:
        return 0
    
    max_sum = nums[0]
    current_sum = nums[0]
    
    for i in range(1, len(nums)):
        # 如果当前和为负,不如从头开始
        current_sum = max(nums[i], current_sum + nums[i])
        # 更新最大和
        max_sum = max(max_sum, current_sum)
    
    return max_sum

# 测试
print(max_sub_array([-2, 1, -3, 4, -1, 2, 1, -5, 4]))  # 6
print(max_sub_array([1]))                                  # 1
print(max_sub_array([5, 4, -1, 7, 8]))                   # 23
print(max_sub_array([-1]))                                 # -1