动态规划算法-简单多状态dp问题:12.打家劫舍Ⅱ

题目链接:213. 打家劫舍 II(中等)

算法原理:

解法:动态规划

Java代码:

java 复制代码
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-10-16
 * Time: 22:50
 */
class Solution {
    //213. 打家劫舍 II
    //看完吴小哲的代码后,找到错误了
    //if(k>j) return 0;这里不是≥,就是>
    //rod1的返回值是f[j]和g[j],传入的参数不是边界,而是实际能到的地方
    int n;
    //int[] f,g;移除全局变量,防止计算y时,x的计算结果的影响
    public int rob(int[] nums) {
        n=nums.length;
        if(n==0) return 0;
        if(n==1) return nums[0];//新增处
        //int[] f=new int[n];
        //int[] g=new int[n];
        //f[0]=nums[0];g[0]=0;
        //第一个偷
        int x=rob1(2,n-2,nums)+nums[0];
        //第一个不偷
        int y=rob1(1,n-1,nums);
        return Math.max(x,y);
    }
    public int rob1(int k,int j,int[] nums){
        if(k>j) return 0;
        int[] f=new int[n];
        int[] g=new int[n];
        f[k]=nums[k];g[k]=0;
        for(int i=k+1;i<=j;i++){
            f[i]=g[i-1]+nums[i];
            g[i]=Math.max(f[i-1],g[i-1]);
        }
        return Math.max(g[j],f[j]);
    }
}
相关推荐
JAVA面经实录91710 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
王老师青少年编程11 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
周杰伦fans11 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
叼烟扛炮11 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说12 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove12 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
小程故事多_8012 小时前
[大模型面试系列] 多轮对话 Agent 设计实战(含窗口优化 + 工具调用精髓)
人工智能·面试·职场和发展
leoufung13 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了13 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL13 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化