题目链接 最大子数组和
思路:动态规划
计算以第i个数为最后一个数的子数组的和
状态转移方程:
d
p
[
i
]
=
m
a
x
(
d
p
[
i
−
1
]
,
d
p
[
i
−
1
]
+
n
u
m
s
[
i
]
)
dp[i] = max(dp[i-1],dp[i-1]+nums[i])
dp[i]=max(dp[i−1],dp[i−1]+nums[i])
若前面数之和<0,则取nums[i]即可
同时求dp数组中的最大值即为答案
状态转移推导思路有一个很好的链接动态规划
代码实现
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
size = len(nums)
if size==0:
return 0
dp = [0 for _ in range(size)]#初始化一个长度为 size 的数组
dp[0] = nums[0]
for i in range(1,size):
if dp[i-1]<0:
dp[i] = nums[i]
else:
dp[i] = nums[i]+dp[i-1]
return max(dp