‘’’
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
子问题 :以第i个元素结尾的子数组的最大和
状态转移方程:dp[i] = max(dp[i-1] + nums[i], nums[i]) 如果dp[i-1]>0 则dp[i] = dp[i-1] + nums[i]
否则 dp[i] = nums[i]
‘’’
def maxSubArray(nums):
n=len(nums)
if n==0:
return 0
dp=[0 for i in range(n)]
dp[0]=nums[0]
for i in range(1,n):
if dp[i-1]>0:
dp[i]=dp[i-1]+nums[i]
else:
dp[i]=nums[i]
return max(dp) #注意 这里的max是求最大和的子数组,所以返回的是dp数组中的最大值
nums = [-2,1,-3,4,-1,2,1,-5,4]
print(maxSubArray(nums))