动态规划算法-简单多状态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]);
    }
}
相关推荐
偷吃的耗子几秒前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
喜欢喝果茶.4 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓5 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)5 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
island131427 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了31 分钟前
Java中的集合
java·开发语言
魔芋红茶35 分钟前
Python 项目版本控制
开发语言·python
云小逸1 小时前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
冰暮流星1 小时前
javascript之二重循环练习
开发语言·javascript·数据库
风指引着方向1 小时前
自定义算子开发入门:基于 CANN op-plugin 的扩展实践
开发语言