代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III

动规五部曲:

1.确定dp数组含义

2.确定递推公式

3.初始化dp数组

4.确定遍历顺序

5.打印数组排错

LeetCode T198 打家劫舍

题目链接:198. 打家劫舍 - 力扣(LeetCode)

题目思路:

今天我们走出背包问题,开始进入新一轮经典问题的学习:打家劫舍问题.

题目大概含义就是我们不能在相邻的两间房子偷东西,最后要求我们得到的最大钱数是多少,我们仍然使用动规五部曲来分析问题

1.确定dp数组含义

dp[i]偷到这一家获得的最大钱数(包含这一家,但是偷不偷不知道)所以我们可以理解为考虑而不是一定包含在内.

2.确定递推公式

就是取决于这一家偷或者不偷之间取得的最大值

dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1])

3.初始化dp数组

由于取值取决于前两家的价值,所以这里我们初始化前两个元素

dp[0] = nums[0];

dp[1] = Math.max(nums[0],nums[1]);

4.确定遍历顺序

从前向后遍历,因为后面的取决于前面元素的产生

5.打印数组排错

题目代码:

class Solution {
    public int rob(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0],nums[1]);
        for(int i = 2;i<nums.length;i++){
            dp[i] = Math.max(nums[i]+dp[i-2],dp[i-1]);
        }
        return dp[nums.length-1];

    }
}

LeetCode T213 打家劫舍II

题目链接:213. 打家劫舍 II - 力扣(LeetCode)

题目思路:

这题其实就是在第一题的思路上加上了一个环,首尾相连,这样我们其实就是考虑两种情况即可,一个是包含头,那么就不能包含尾了,因为这里其实就是首尾是相邻的,所以就是将去头和去尾的数组重新进行第一题的打家劫舍操作,最后取最大值即可.

题目代码:

class Solution {
    public int rob(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        if(nums.length == 2){
            return Math.max(nums[0],nums[1]);
        }
        int[] tmp = new int[nums.length-1];
        int[] tmp1 = new int[nums.length-1];
        System.arraycopy(nums,0,tmp,0,nums.length-1);
        System.arraycopy(nums,1,tmp1,0,nums.length-1);
        return Math.max(rub1(tmp1),rub1(tmp));

    }
    public int rub1(int[] nums){
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0],nums[1]);
        for(int i = 2;i<nums.length;i++){
            dp[i] = Math.max(nums[i]+dp[i-2],dp[i-1]);
        }
        return dp[nums.length-1];

    }
}

LeetCode T337 打家劫舍III

题目链接:337. 打家劫舍 III - 力扣(LeetCode)

题目思路:

树形dp的入门题,我们要使用二叉树那里的递归+动态规划来解决问题

1.确定递归参数和返回值

这里我们要求一个节点 偷与不偷的两个状态所得到的金钱,那么返回值就是一个长度为2的数组。我们规定dp[0]表示不偷,dp[1]表示偷

2.确定终止条件

当遇到空节点时,直接返回dp数组即可

3.确定遍历顺序

后序遍历,因为我们要获取左节点偷与不偷的情况和右节点偷与不偷的情况返回给父节点.

4.确定单层递归逻辑

此时就是父节点偷或者不偷

dp[0]就是不偷,就直接考虑左节点偷与不偷的最大值加上右节点偷与不偷的最大值.

dp[1]就是偷,就直接用该节点的值加上左节点不偷,右节点不偷的最大值

题目代码:

class Solution {
    public int rob(TreeNode root) {
        int[] res = robAction(root);
        return Math.max(res[0],res[1]);

    }
    public int[] robAction(TreeNode cur){
        int[] res = new int[2];
        if(cur == null){
            return res;
        }
        int[] dp_left = robAction(cur.left);
        int[] dp_right = robAction(cur.right);

        //不偷他就在左右都偷相加
        res[0] = Math.max(dp_left[0],dp_left[1])+Math.max(dp_right[0],dp_right[1]);
        res[1] = cur.val + dp_left[0] + dp_right[0];
        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

桌面远程连接

遇到的问题&#xff1a; win11家庭版不支持远程连接&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a; 被控方电脑 1、打开控制面板-系统和安全-允许远程访问&#xff0c;勾选允许远程协助连接这台计算机 2、打开控制面板-系统和安全-Windows Defender 防火墙-允许…

WebDAV之π-Disk派盘 + PassStore

大家常用的qq,手机微信,新浪微博等。假如各个网址都设成同样的帐号和登陆密码,一旦某一帐户泄漏了,别的平台上的账户密码都有被撞库攻击的风险。在不一样的站点设定不一样的高韧性登陆密码才算是最安全可靠的确保,殊不知这般繁多的帐户密码是难以记得的。因而,有着一款安…

js:React中使用classnames实现按照条件将类名连接起来

参考文档 https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames 安装 npm install classnames示例 import classNames from "classnames";// 字符串合并 console.log(classNames("foo", "bar")); // foo bar//…

C语言精华题目锦集1

第一题 test.c文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的是&#xff08;&#xff09;【多选】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a  B:b  C:c  D:d #define是宏定义&#xff0c;此时在程序中IN…

关于echarts封装组件以及多次更新数据信息加载问题

项目中经常使用到echarts插件&#xff0c;使用时会遇到封装组件的问题&#xff0c;一个组件到底怎么封装才是完善的&#xff1f;仁者见仁智者见智思路不同封装的方式就是不同的。废话不多直接上封装的代码&#xff1a; <template><div :id"id" :style"…

日料西餐厅餐品预约小程序的作用是什么

日料店西餐厅客源也不少&#xff0c;对经营者来说&#xff0c;高市场需求度的同时也面临一些痛点&#xff1a; 1、品牌宣传拓客难 日料/西餐厅虽然已经存在多年&#xff0c;但依然有大量用户并没有消费过&#xff0c;因此这需要商家不断拓展品牌实力及餐品呈现吸引客户前往&a…

银行汇款回执单制作器,回执单,工商农业建设邮政中国,易语言开源版!

易语言学了7年&#xff0c;用画板做一个汇款单生成器轻而易举&#xff0c;但是我加了水印的&#xff0c;并且也没有在这里提供软件的下载地址&#xff0c;图片上面也加了水印处理&#xff0c;所以仅仅只是技术教程和思路分享&#xff0c;然后代码最后也会分享出来&#xff0c;就…

unity Holoens2开发,使用Vuforia识别实体或图片 触发交互

建议&#xff1a;先看官方文档 我使用的utniy 版本&#xff1a;Unity 2021.3.6f1 官方建议&#xff1a;混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn 配置了正确工具的 Windows 10 或 11 电脑Windows 10 SDK 10.0.18362.0 或更高版本安装了 U…

Vue2+elementui项目导出el-table的数据为xlsx表格

1、安装3个插件 &#xff08;file-saver、 xlsx、script-loader&#xff09; npm install -S file-saver xlsxnpm install -D script-loader 2、在utils目录下新建一个 Export2Excel.js 脚本 &#xff08;我的路径在/utils/Export2Excel.js&#xff09; /* eslint-disable *…

Apache Storm 2.5.0 集群安装与配置

1、下载Apache Storm 2.5.0 https://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-2.5.0/ 2、准备3台服务器 192.168.42.139 node1 192.168.42.140 node1 192.168.42.141 node2 3、配置host [rootnode1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost…

用循环结构程序自动化计算——计数循环

用循环结构程序自动化计算——计数循环 低阶目标&#xff1a; 利用for循环结构来完成已知次数的自动化处理&#xff0c;掌握计数循环结构应用方法 高阶目标&#xff1a; 学会利用for循环解决生活中的实际问题 用循环结构程序自动化计算——计数循环 用循环结构程序自动化计算…

python web框架 flask基础入门教程

python web框架 flask基础入门教程 今天我们写一个flask基础入门教程&#xff0c;当然也会覆盖很多重要的知识点&#xff0c;在这篇博客中&#xff0c;我们主要会讲解如下内容&#xff1a; 1、通过flask框架向web传输和接收参数 2、实现静态图片插入和图书上传 3、实现搭建…

k8s 配置资源管理

配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 有三种类型&#xff1a; ●kubernetes.…

【C++】继承详解

本篇要分享的内容是关于继承的内容哼哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊 以下为本篇目录 目录 1.简单了解继承 2.继承的简单定义 3.继承简单使用 4.继承方式 4.1基类的privat 4.2基类的protected 4.3不可见与private的区别 5.父子类对象赋值转换 6.继承的作用域 7.子…

【Linux权限:系统中的数字锁与安全之门】

1.Linux下的用户 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情。超级用户的命令提示符是“#”&#xff0c;普通用户的命令…

计算机网络实验

计算机网络实验 使用软件PT7.0按照上面的拓扑结构建立网络&#xff0c;进行合理配置&#xff0c;使得所有计算机之间能够互相通信。并且修改各交换机的系统名称为&#xff1a;学号_编号&#xff0c;如你的学号为123&#xff0c;交换机Switch0的编号为0&#xff0c;则系统名称为…

基于Jaccard相似度的推荐算法---示例

目录 数据展示推荐算法的分类基于相似度基于流行度/上下文/社交网络 Jaccard相似度分析数据的特点可以考虑的方法计算方法优缺点计算用户之间的Jaccard相似度获取与给定最相似的10个用户对1713353的用户推荐10本书 数据展示 import pandas as pd import numpy as np# 读取CSV文…

如何处理【SVC】中的样本不均衡问题

样本不均衡是指在一组数据集中&#xff0c;标签的一类天生 占有很大的比例&#xff0c;但我们有着捕捉出某种特定的分类的需求的状况。比如&#xff0c;我们现在要对潜在犯罪者和普通人进行 分类&#xff0c;潜在犯罪者占总人口的比例是相当低的&#xff0c;也许只有2%左右&…

CSS 边框、轮廓线

一、CSS边框&#xff1a; CSS边框属性允许指定一个元素边框的样式和颜色。 1&#xff09;、边框样式&#xff1a;border-style属性用来定义边框的样式&#xff0c;border-style值&#xff1a; 2&#xff09;、边框宽度&#xff1a;border-width属性用于指定边框宽度。指定变宽…