js(109)~198. 打家劫舍

231 阅读1分钟

198. 打家劫舍

image.png

上一题刚写完,炒股最大收益,以为很相似,其实不一样,二维数组,按照船长的思路写出来,然后觉得这二位数组能够搞成一维数组,搞不定啊,然后看了别人的一维数组,方法思路都不一样了,虽说同样都是动态规划

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]
};