题解 | #连续子数组的最大和#

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

思路:动态规划求解,将问题变成数个易求解的子问题,再将子问题放到全局比较。

子问题:以数组中序号为i的数作为连续子数组的最后一个数时,得到的最大和dp[i]。 只需要考虑相比于i-1的情况的变化。如果dp[i-1]是负数,反而会让和变小,不如不加;dp[i-1]是正数则加上array[i]。无论如何,array[i]是肯定要的。

初始值:dp[0] = array[0]

状态转移方程:dp[i] = max(dp[i-1]+array[i],array[i])

知道每种子问题的解之后,放到全局比较,同样是选出最大的。这里用res临时存储,遇到更大的就更新。

```function FindGreatestSumOfSubArray(array)
{
    let temp = 0
    let res = array[0]
    for(let i = 0;i<array.length;i++){
        temp = Math.max(array[i],array[i]+temp)
        res = Math.max(temp,res)
    }
    return res
}
module.exports = {
    FindGreatestSumOfSubArray : FindGreatestSumOfSubArray
};
全部评论

相关推荐

剑桥断刀:找啥工作,牛客找个比如大厂软开或者随便啥的高薪牛马,大把没碰过妹子的技术仔,狠狠拿捏爆金币
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务