419 字
2 分钟
打家劫舍

198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1] **输出:**4 **解释:**偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。   偷窃到的最高金额 = 1 + 3 = 4 。

自己想想不到,其实简单 和斐波那契数列那种有点像,只需要考虑第i个怎么来的

把到第i个房屋的最大金额存进一个数组dp中

首先考虑特殊,就一个和两个房子 只有一间就是nums0,只有两间就是两间中较大的哪个 所以dp的1和2就得到了 第i个房屋两种状态,偷或者不偷,如果偷,那么i-1不偷,所以到第i个房屋的最大金额就是 到第i-2个房屋的最大金额加上i这个房屋的金额 如果不偷 那么i房屋不影响结果 最大金额就是到第i-1房屋的最大金额 然后在这两者之间取最大 写出公式就是

dp[i]=max(dp[i-1],dp[i-2]+nums(i))

然后用一个循环把数组填满就行了 返回最后一个数

打家劫舍
https://overtone-zoean.vercel.app/posts/打家劫舍/
作者
Zoean
发布于
2026-04-11
许可协议
CC BY-NC-SA 4.0