Easy
, Dynamic Programming
给定序列(至少包含一个数),寻找连续子序列,其拥有最大和。
Example, 给定 [-2,1,-3,4,-1,2,1,-5,4],
最大子序列[4,-1,2,1] 最大和 6.
这是一个dynamic programming 解决的优化问题。求A[:]
的子序列最大和可以转为求A[:i]
的子序列最大和,i
为子序列的最大值,不断更行子问题的解来求得最终解。也可以说是使用了divide and conqure 的思想。
如果已知A[:i-1]
的子序列最大和sum(i-1)
,那A[:i]
的解就是取sum(i-1)
和i
位置的局部最大值的较大值。那么如何求i
位置的局部最大值,同样也是一个DP问题,对i-1
位置的局部最大值进行更新。
此题对于没有DP思想的coder来说其实是很难的一道题,但是LeetCode将其分类为easy。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
localmax, globalmax = 0, None
for num in nums:
globalmax = max(globalmax, localmax+num)
localmax = max(0, localmax+num)
return globalmax
网友评论