LeetCode 53_ 最大子序和

1. 题目描述

注: 属于动态规划.

2. 代码

1 class Solution:
2     def maxSubArray(self, nums: List[int]) -> int:
3         for i in range(1,len(nums)):
4             nums[i] = max(nums[i-1]  + nums[i], nums[i])
5         return max(nums)

思路:  nums[i] 是从1开始的, 开始算的是num[0]+nums[1]与nums[i]的最大值. 找到最大值, 更新nums[i]. 迭代完成后返回nums的最大值.

 

另一种解法:

 1 import sys
 2 class Solution:
 3     def maxSubArray(self, nums: 'List[int]') -> 'int':
 4         sums = 0
 5         maxsum = -sys.maxsize
 6         n = len(nums)
 7         for i in range(n):
 8             if sums < 0:#如果sums为负数, 则直接丢弃不用. 因为负数+任意数肯定小于原来的数.
 9                 sums = nums[i]
10             else:
11                 sums += nums[i]
12             maxsum = max(maxsum,sums)#使用当前连续和更新最大值
13         return maxsum

 

posted @ 2020-10-21 20:45  vv_869  阅读(69)  评论(0编辑  收藏  举报