213. 打家劫舍 II(leetcode)
https://leetcode.cn/problems/house-robber-ii/description/
灵神题解:
class Solution {
public int rob(int[] nums) {
// f[i]表示前i个房屋选能获得的最大金额
// 以第i个房屋选还是不选划分子集,由于是环状,因此选第i个房屋,则需要考虑i-1,i+1都不能选择
// 这里无法处理i+1,只能分为选或者不选第一个房屋的情况,
// 1.不选择第一个房屋的情况,则最后一个房屋可以选择,i可以等于nums.length-1
// 2.选择第一个房屋的情况,最后一个房屋不能选择 , i<nums.length-1
// 状态方程一样,但是初值不同,
// f[i]=max(f[i-2]+nums[i],f[i-1])
// 1.f[1]=nums[0],2.f[1]=0 这里f[1]和上面状态方程的下标有偏移一位
int N = 110;
int[] f=new int[N];
f[1]=nums[0];
int res=0;
for(int i=2;i<=nums.length-1;i++)
{
f[i]=Math.max(f[i-2]+nums[i-1],f[i-1]);
res=Math.max(res,f[i]);
}
Arrays.fill(f,0);
f[1]=0; // 可以省略,但是为了表述清楚,保留
for(int i=2;i<=nums.length;i++)
{
f[i]=Math.max(f[i-2]+nums[i-1],f[i-1]);
res=Math.max(res,f[i]);
}
return res;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix