[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

posted @ 2021-10-23 09:53  梦想是能睡八小时的猪  阅读(60)  评论(0)    收藏  举报