最大子数组和
1.思路
考虑动态规划,把问题分解为小的子问题,在这个问题中我们把子问题dp[i]定义为以nums[i]结尾的连续子数组的最大值。以测试用例1为例,现在nums=[-2,1,-3,4,-1,2,1,-5,4],则初始值dp[0]=-2,dp[1]=-2+1=-1,dp[2]=-2+1=-1……,注意对于每个时刻的dp[i],有
2.解题方法
见代码
3.复杂度
时间复杂度:O(n)
空间复杂度:O(n)
4.Code
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
#动态规划dp问题
#我们将子问题定义为以nums[i]结尾的连续子数组的最大值
lenofnums=len(nums)
dp=[0]*lenofnums
dp[0]=nums[0]
for i in range(1,lenofnums):
if dp[i-1]<=0:
dp[i]=nums[i]
else:
dp[i]=nums[i]+dp[i-1]
return max(dp)