https://leetcode-cn.com/problems/maximum-subarray/

class Solution:
def maxSubArray(self, nums: list[int]) -> int:
if len(nums) <=1:
return sum(nums)
vs = [0]*len(nums)
vs[0]= nums[0]
result = nums[0]
for i in range(1,len(nums)):
vs[i] = max(vs[i-1]+nums[i],nums[i])
result =max(result,vs[i] )
return result
思路:
这个使用动态规划DP来做,关键是要找这次的结果和上次的结果有什么关系。 1,使用vs来保存每次的时候的最大值,vs[i] = max(vs[i-1]+nums[i],nums[i]) 2, vs[i] =vs[i-1]+nums[i] 表示 nums[i]为正的 3, vs[i] =nums[i] 表示 vs[i-1] 是负的 4, 还需要一个result来记录过程中的值,因为不一定vs[i] 就一定大于vs[i-1],比如vs[i-1] =-10, nums[i] = -7
本文介绍如何使用动态规划解决LeetCode问题,通过maxSubArray函数求解数组中连续子数组的最大和。关键在于理解vs数组存储每次更新最大值的过程,以及result记录最终结果。
6664

被折叠的 条评论
为什么被折叠?



