当前位置: 首页 > article >正文

【Hot100】LeetCode—198. 打家劫舍

目录

  • 1- 思路
    • 动规五部曲
  • 2- 实现
    • 198. 打家劫舍——题解思路
  • 3- ACM 实现


  • 原题链接:198. 打家劫舍

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. 打家劫舍——题解思路

在这里插入图片描述

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 实现

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));
    }
}

http://www.kler.cn/a/304130.html

相关文章:

  • 在C++上实现反射用法
  • C指针创建三维数组
  • F5全新报告揭示AI时代API安全面临严峻挑战
  • JMeter基础篇
  • 微信小程序_模板与配置_day2
  • Redis五种数据类型剖析
  • 解决缺少genconfig
  • Rust 变量基础知识
  • Linux:命令行参数
  • DX-5009N 10G交换机 SFP接口+猫棒 代替运营商光猫 【注册状态O5但是无法PPPoe拨号踩坑——交换机VLAN配置】
  • Leetcode面试经典150题-69.X的平方根
  • AI教你学Python 第4天:函数和模块
  • 【HTML】可展开的顶层菜单栏
  • 拳皇97确反笔记
  • Go语言现代web开发08 if和switch分支语句
  • Spring Boot Admin集成与自定义监控告警
  • 【C++ 高频面试题】指针和引用、关于内存泄漏和野指针问题
  • 云服务器中的MinIO 配置 HTTPS 过程(图文)
  • 基于微信小程序+Java+SSM+Vue+MySQL的药店管理系统
  • Iceberg与SparkSQL查询操作整合
  • JS设计模式之适配器模式:接口天然的“翻译官”
  • 【物联网技术大作业】设计一个智能家居的应用场景
  • [项目][WebServer][项目介绍及知识铺垫][下]详细讲解
  • Java项目: 基于SpringBoot+mybatis+maven美发门店管理系统(含源码+数据库+毕业论文)
  • 【HTTP】URL的基本概念和构成
  • Unity Lua方向的面试真题详解