[Leetcode]9. 连续子数组的最大和(动态规划)
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
思想:使用动态规划算法,遍历一遍数组,数组更新原则为:
nums[i]<nums[i-1]+nums[i]
即后一项加上前一项要大于前一项,那么表示加上了一个可以使目标数组更大的数,如果小于,则不进行更新,每次更新都比较一下是否是当前最大值,遍历完整个数组后返回记录的最大值.
更新后的对应nums[i]值就是加和上前项所能达到的最大值,后项和前项比较是否需要累加.
func maxSubArray(nums []int) int { var res = nums[0] for i:=1;i<len(nums);i++{ nums[i] = Max(nums[i],nums[i-1]+nums[i]) res = Max(nums[i],res) } return res } func Max(n1,n2 int) int{ if n1>n2{ return n1 }else{ return n2 } }
题目来源:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof