LeetCode 213. 打家劫舍 II
- 可以直接分类讨论,分别枚举第一个房屋偷或不偷的情况,最后再取极值
- 不偷第一家
f[i]
代表前 i 个房屋,偷第 i 个, 且不偷第一家的最大值g[i]
代表前 i 个房屋,不偷第 i 个, 且不偷第一家的最大值
- 偷第一家
f[i]
代表前 i 个房屋,偷第 i 个, 且偷第一家的最大值g[i]
代表前 i 个房屋,不偷第 i 个, 且偷第一家的最大值
代码
class Solution {
public:
int rob(vector<int>& nums) {
int n=nums.size();
if(n==1) return nums[0];
vector<int> f(n+1),g(n+1);
//不偷第一家
f[1]=INT_MIN;//状态不合法,设为负无穷,不让其更新状态
for(int i=2;i<=n;i++)
{
g[i]=max(f[i-1],g[i-1]);
f[i]=g[i-1]+nums[i-1];
}
int res=max(g[n],f[n]);
//偷第一家
f=vector<int> (n+1);
g=vector<int> (n+1);
f[1]=nums[0];g[1]=INT_MIN;//状态不合法,设为负无穷,不让其更新状态
for(int i=2;i<=n;i++)
{
g[i]=max(f[i-1],g[i-1]);
f[i]=g[i-1]+nums[i-1];
}
res=max(res,g[n]);//偷第一家的话,f[n]一定不能是答案
return res;
}
};
有帮助的话可以点个赞,我会很开心的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?