心路历程:
子数组的和是可以通过前面的和加上当前值递推获得,所以可以用动态规划解决这道题
注意的点:
1、这道题再获取最大值时res不能用0而需要用负无穷初始化
解法:动态规划
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
@cache
def dp(i): # 以nums[i]为结尾的最大和的连续子数组
if i == 0: return nums[0]
return max(dp(i-1) + nums[i], nums[i])
res = -float('inf') # 不要用0初始化
for k in range(len(nums)):
res = max(res, dp(k))
return res