198. 打家劫舍
上一题刚写完,炒股最大收益,以为很相似,其实不一样,二维数组,按照船长的思路写出来,然后觉得这二位数组能够搞成一维数组,搞不定啊,然后看了别人的一维数组,方法思路都不一样了,虽说同样都是动态规划
var rob = function (nums) {
const n = nums.length;
/*
// 方法一
// dp[i] 表示投第i家最大收益
const dp = Array.from(new Array(n), () => [0, 0])
// 偷第1家
// 不偷第一家
dp[0][0] = 0;
dp[0][1] = nums[0];
for (let i = 1; i < n; i++) {
// 不偷第i家 总收益 取决于上一次的收益(偷不偷上一家的最大值)
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]);
// 偷第i家
dp[i][1] = dp[i - 1][0] + nums[i];
}
return Math.max(dp[n - 1][0], dp[n - 1][1]); */
// 方法二
// dp[i]
// 取决于偷i家
// 不偷 第i家 就是偷第 i - 1
const dp = [nums[0], Math.max(nums[0], nums[1])];
for (let i = 2; i < n; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i])
}
return dp[n - 1]
};