题解 | #不相邻最大子序列和#

不相邻最大子序列和

http://www.nowcoder.com/practice/269b4dbd74e540aabd3aa9438208ed8d

一个简单的DP,对于每一个数字而言都有两种状态:选或不选,只需要从头至尾遍历,计算选择或不选当前位的结果,选择其中更大的值保存进dp数组,最终输出dp数组的最后一个元素即可。

这里要注意数据可能为负数,当整个数组都只有负数时一个都不选才是最优解,因此需要给dp[0]赋0,dp[1]赋dp[0](不选arr[0])和arr[0](选arr[0])中的其大数。

function subsequence(n, array) {
  // write code here
  let dp = new Array(n + 1);
  
  dp[0] = 0;
  dp[1] = Math.max(dp[0], array[0]);
  
  for (let i = 2; i <= n; i++) {
    dp[i] = Math.max(dp[i - 1], dp[i - 2] + array[i - 1]);
  }
//   dp[n]=Math.max(dp[n], dp[n-1]);
  return dp[n];
}
module.exports = {
  subsequence: subsequence,
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务