(自己写着玩)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6
(参考官方答案求解)
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
maxnum=0
maxans=nums[0]
for i in range(len(nums)):
maxnum=max(maxnum+nums[i],nums[i])
maxans=max(maxnum,maxans)
return maxans
动态规划问题:
因为求连续子数组中元素和的最大值,所以定义一个变量maxnum用以赋值当前的最大值并与之后数组中的元素进行对比并进行更新。
而maxans则是用来比较每个子数组和的大小,并赋值为子数组和最大的值。
开始循环:
maxnum从头开始遍历,当子数组的和加上下一个数组元素的和要大于该数组元素时,就将其加入形成新的子数组,而当
该数组元素要大于子数组与其的加和时,则该子数组到此终止,自当前数组元素开启一个新的子数组。
f(i)=max{f(i−1)+nums[i],nums[i]}
然后通过maxans不断比较这些的大小,并储存最大的,知道遍历完这个数组。
就这样,那么什么是动态规划呢