【Hot100】LeetCode—198. 打家劫舍

目录

  • [1- 思路](#1- 思路)
  • [2- 实现](#2- 实现)
    • [⭐++198. 打家劫舍++------题解思路](#⭐198. 打家劫舍——题解思路)
  • [3- ACM 实现](#3- ACM 实现)


1- 思路

动规五部曲

  • 1- 定义 dp 数组
    • int[] dp = new int[nums.length]
    • dp[i] 代表考虑下标i 偷的最大金币数
  • 2- 递推公式
    • 当偷 idp[i-2] + nums[i]
    • 当不偷 idp[i-1]
    • 结论:dp[i] = Math.max(dp[i],dp[i-1])
  • 3- 初始化
    • dp[0] = nums[0];
    • dp[1] = Math.max(nums[0],nums[1]);
  • 4- 遍历顺序
    • i2 开始遍历

2- 实现

⭐++198. 打家劫舍++------题解思路

java 复制代码
class Solution {
        public int rob(int[] nums) {
        
        // 1.定义 dp 确定含义
        // dp[i] 代表,遍历到 i 的最大金币数
        int len = nums.length;
        if(len==1){
            return nums[0];
        }
        int[] dp = new int[len];

        // 2. 递推公式
        // 偷当前 dp[i-2] + nums[i];
        // 不偷 dp[i-1]
        // dp[i] = Math.max(dp[i-1] , dp[i-2] + nums[i]);

        // 3. 初始化
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0],nums[1]);

        for(int i = 2 ; i < len;i++){
            dp[i] = Math.max(dp[i-1] , dp[i-2] + nums[i]);
        }
        return dp[len-1];
    }
}

3- ACM 实现

java 复制代码
public class rob {


    public static int rob(int[] nums){

        // 1. 定义 dp 数组
        // dp[i] 代表 第 i 天获得的最大金币数
        int len = nums.length;
        if (len == 1) {
            return nums[0];
        }
        int[] dp = new int[len];

        // 2. 递推公式
        // i 偷 dp[i-2] + nums[i]
        // i 不偷 dp[i-1]
        // dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);

        // 3. 初始化
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);

        // 4. 遍历
        for (int i = 2; i < len; i++) {
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }

        return dp[len - 1];
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String[] parts = input.split(" ");
        int[] nums = new int[parts.length];
        for(int i = 0 ; i < parts.length;i++){
            nums[i] = Integer.parseInt(parts[i]);
        }
        System.out.println("结果是"+rob(nums));
    }
}
相关推荐
未来之窗软件服务几秒前
幽冥大陆(三十九)php二维数组去重——东方仙盟筑基期
android·开发语言·算法·php·仙盟创梦ide·东方仙盟·东方仙盟sdk
DFT计算杂谈4 分钟前
Abinit-10.4.7安装教程
linux·数据库·python·算法·matlab
sali-tec12 分钟前
C# 基于halcon的视觉工作流-章65 点云匹配-基于形状
开发语言·人工智能·算法·计算机视觉·c#
AI科技星24 分钟前
自然本源——空间元、氢尺、探针与场方程
数据结构·人工智能·算法·机器学习·计算机视觉
小O的算法实验室33 分钟前
2025年CMAME SCI2区,基于优先级驱动搜索、具备动态候选解管理策略的粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
吃着火锅x唱着歌36 分钟前
LeetCode 2874.有序三元组中的最大值II
数据结构·算法·leetcode
xxxxxmy1 小时前
相向双指针—三数之和
python·算法·相向双指针
Blossom.1181 小时前
基于知识图谱+LLM的工业设备故障诊断:从SQL日志到可解释推理的实战闭环
人工智能·python·sql·深度学习·算法·transformer·知识图谱
conkl1 小时前
梅森旋转算法深度解析:构建更健壮的前端请求体系
前端·算法·状态模式