leetcode_0053 最大子序和

642 阅读1分钟

要求:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

  • 示例 1
 输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
 输出:6
 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
  • 示例 2
 输入:nums = [1]
 输出:1
  • 示例 3
 输入:nums = [0]
 输出:0
  • 示例 4
 输入:nums = [-1]
 输出:-1
  • 示例5
 输入:nums = [-100000]
 输出:-100000

详解代码

 class Solution(object):
     def maxSubArray(self, nums):
         if not nums:
             return 0

         currSum, result = nums[0], nums[0]
 
         for index in range(1, len(nums)):
             currSum = max(nums[index], currSum + nums[index])
             result = max(result, currSum)
 
         return result

image.png 解题思路:其中最重要的部分是currSum的设计,可以算出加上当前值之后是直接使用新值进行替换还是,在原有的currSum的上面新值,这个设计可以得到局部最大值,result就是保存历史最大值。

数据:[-2,1,-3,4,-1,2,1,-5,4]

currSumresult
0-2-2
111
2-21
344
434
555
666
716
856