题目
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
总结
反思:此题略微分析便知要用动态规划的方法求解,但是找子问题是最大的难点,做题时想法局限于用数组保存的数据一定是每步最优解的值。苦苦找不到合适的解法。看别人代码后总结经验:数组不一定要保存子问题的最优解,可以保存局部最优解,再从局部最优解得到子问题的最优解。
解法:使用数组保存包含当前点的最优解:即局部最优,同时使用max记录全局最优解。
代码:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums == None or len(nums) < 1:
return 0
max = nums[0]
sums = [max]
for i in range(1, len(nums)):
before = sums[-1]
if before < 0:
sums.append(nums[i])
else:
sums.append(before + nums[i])
if sums[-1] > max:
max = sums[-1]
return max
`