题目
-
- 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
思路
动态规划dp(Dynamic Programming)
- 对于偷到
i家的时候,有两种情况:1.偷;2.不偷
- 如果偷,那么前一家就不能偷。如果不偷,那么前一家就一定偷(为了金额最大化)
- 通过以上分析,就可以对这两种条件进行判断,取两种情况下的最大化收益
题解
var rob = function(nums) {
if (nums.length === 0) return 0;
if(nums.length === 1) return nums[0]
const dp = [nums[0], Math.max(nums[0], nums[1])];
for(var i = 2; i < nums.length;i++) {
const steal = dp[i - 2] + nums[i];
const notSteal = dp[i - 1];
dp.push(Math.max(steal, notSteal));
}
return Math.max(...dp)
};
扩展