题解 | #连续子数组的最大和#
连续子数组的最大和
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
};