leetcode53 最大子数组和

题目

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

示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

解析

用动归五部曲分析下
1.确定DP数组及其含义
dp[i]:包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。
2.确定递推公式
要确定dp[i],有两种情况:
加到当前已有的子数组和中;或者重新开始计算连续子数组,这个就是第一个,则递推公式为:dp[i] = max(dp[i - 1] + nums[i], nums[i]);
3.初始化dp数组
先初始化为数组的第一个值nums[0]就行

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

func max(a, b int) int {
    if a > b {
        return a 
    }
    return b
}

\

你可能感兴趣的:(算法,动态规划,数据结构)