动态规划之最大子序列

2020-07-26  本文已影响0人  wwq2020

题目

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

思路

在索引是n位置的最大总和是 n-1处总和加n位置值 以及n位置值 两者的最大值

状态转移方程

dp[n] = max(dp[n-1] + num[n])

最终代码

func calc(nums []int) int {
    if len(nums) < 1 {
        return 0
    }
    dp := make([]int, len(nums))
    result := nums[0]
    dp[0] = nums[0]
    for i := 1; i < len(nums); i++ {
        dp[i] = max(dp[i-1]+nums[i], nums[i])
        result = max(dp[i], result)
    }
    return result
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}
上一篇 下一篇

猜你喜欢

热点阅读