【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));
    }
}
相关推荐
原来是猿13 分钟前
蓝桥备赛(四)- 数组(下)
开发语言·数据结构·c++·算法
ephemerals__24 分钟前
【数据结构进阶】哈希表
数据结构·算法·散列表
阿巴~阿巴~1 小时前
关于回溯算法中的剪枝是否需要for循环的总结归纳
数据结构·c++·算法·深度优先·剪枝
一只_程序媛1 小时前
【leetcode hot 100 42】接雨水
java·算法·leetcode
普通young man1 小时前
哈希封装unordered_map/unordered_set
算法·哈希算法
Dovis(誓平步青云)1 小时前
【数据结构】二叉树(门槛极低的系统理解)
c语言·数据结构·算法
朔北之忘 Clancy1 小时前
2022 年 12 月青少年软编等考 C 语言五级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
一只码代码的章鱼2 小时前
数据结构与算法-图论-最短路-floyd扩展
算法·图论
跳动的梦想家h2 小时前
hot100-矩阵
java·算法·矩阵
Liu_Meihao2 小时前
【算法】796. 子矩阵的和
算法