Skip to content

最优解问题的典型思路

Code

ts
/**
 * 不能取相邻的2个数, nums = [1, 2, 3, 1]
 * 最大值 = 1 + 3 = 4
 */

解析

ts
/**
 * dp[i] = Math.max(
 *  nums[i] + dp[i - 2],
 *  dp[i - 1]
 * )
 * i = 0 => dpi[0] = nums[0]
 * i = 1 => Math.max(nums[0], nums[1])
 */
var rob = function (nums) {
  if (nums.length === 0) {
    return 0;
  }
  if (nums.length === 1) {
    return nums[0];
  }
  if (nums.length === 2) {
    return Math.max(nums[0], nums[1]);
  }
  const dp = [nums[0], Math.max(nums[0], nums[1])];

  for (let i = 2; i < nums.length; i++) {
    dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1]);
  }
  return dp[nums.length - 1];
};