步骤一、确定状态:
确定dp数组及下标含义 dp[i]:包括下标i之前的最大连续子序列和为dp[i]。
步骤二、推断状态方程:
dp[i]只有两个方向可以推出来: dp[i - 1] + nums[i],即:nums[i]加入当前连续子序列和 nums[i],
即:从头开始计算当前连续子序列和 一定是取最大的,所以dp[i] = max(dp[i - 1] + nums[i], nums[i]);
步骤三、规定初始条件:
初始条件:
全局初始化都是0,dp[0] = nums[0]
步骤四、计算顺序:
递推公式中dp[i]依赖于dp[i - 1]的状态,需要从前向后遍历。
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
# 初始化
dp = [0] * len(nums)
dp[0] = nums[0]
result = dp[0]
# 遍历
for i in range(1, len(nums)):
dp[i] = max(dp[i-1] + nums[i], nums[i])
result = max(result, dp[i])
return result