题目:
思路:
利用动态规划,首先确定子问题,题目给定要求是求“连续的”,因此可以把子问题设置为:求到第i个位置的n个数的总和。设dp[i]为到i位置时num[i]的和;这时候进行分类讨论(写状态转移方程),当dp[i-1]>
0时,此时相加的结果一定是大于本身nums[i]的,因此这时候的状态为:dp[i] = dp[i - 1] + nums[i]
,当dp[i-1]<=0时,此时相加的结果会变小,因此选择nums[i],即dp[i] = nums[i]
代码如下:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
dp = [0 for _ in range(n)]
for i in range(n):
if dp[i - 1] > 0:
dp[i] = dp[i - 1] + nums[i]
else:
dp[i] = nums[i]
return max(dp)