【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));
    }
}
相关推荐
杨航 AI1 小时前
** AI 面试算法 50 题清单**,不是单纯的 LeetCode 题号列表,而是按照“**考察概率 × 面试价值 × 你当前准备方向**”排序
算法·leetcode·面试
m0_720245018 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC8 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯9 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院9 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李10 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.11 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞11 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs66612 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
lsylalalala14 小时前
常见的排序算法1
数据结构·算法·排序算法