leetcode-53.最大子数组之和

438 词

本题采用 Kadane 算法,维护当前子数组最大值与全局最大值。

image.png

1
2
3
4
5
6
7
8
9
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        max_array=current_array=nums[0]
        if len(nums)==1:
            return nums[0]
        for i in nums[1:]:
            current_array=max(i,current_array+i)
            max_array=max(max_array,current_array)
        return max_array

题目解析:
核心思路是一个局部数组,一个全局数组。
局部数组还有一个巧妙的想法就是之分两种情况:
第一种只拿当前这个数组,也就是从这个数组开始。
第二种前面的子数组之和,加上当前这个数组。
理由分析:
如果前面子数组之和是负数,那我不如拿max(这个数组,前面子数组之和)。
如果前面子数组之和是正的,那我直接前面子数组加这个数组是最大的。
然后全局数组负责记录最大的之和