【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day 45,周五,坚持不了一点~

题目详情

[198] 打家劫舍

题目描述

198 打家劫舍
198 打家劫舍

解题思路

前提:相邻两房屋不能连续盗窃
思路:动态规划, dp[i]: [0, i]的房屋中最多可以偷窃的金额,考虑偷窃第i房dp[i - 2] + nums[i],和不偷窃第i房dp[i - 1],取两者较大值
重点:dp数组推导公式、初始化

代码实现

C语言
动态规划
// 动态规划, dp[i]: [0, i]的房屋中最多可以偷窃的金额
// dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])int maxFun(int p1, int p2)
{return p1 > p2 ? p1 : p2;
}int rob(int* nums, int numsSize) {if (numsSize == 0) {return 0;}if (numsSize == 1) {return nums[0];}int dp[numsSize];// dp数组初始化dp[0] = nums[0];dp[1] = maxFun(nums[0], nums[1]);for (int i = 2; i < numsSize; i++) {dp[i] = maxFun(dp[i - 1], dp[i - 2] + nums[i]);}return dp[numsSize - 1];
}

[213] 打家劫舍II

题目描述

213 打家劫舍II
213 打家劫舍II

解题思路

前提:相邻两房屋不能连续盗窃,且首尾不能同时盗窃
思路:动态规划, 首尾不能同时盗窃,分别去除首尾考虑两种情况,取最大值;对于每个情况,dp[i]: [0, i]的房屋中最多可以偷窃的金额,考虑偷窃第i房dp[i - 2] + nums[i],和不偷窃第i房dp[i - 1],取两者较大值
重点:dp数组推导公式、初始化

代码实现

C语言
动态规划
// 动态规划, 分为两种情况, 取较大值
// 情况一: 不考虑最后一个房屋, dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
// 情况二: 不考虑第一个房屋, dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])int maxFun(int p1, int p2)
{return p1 > p2 ? p1 : p2;
}int rangeFun(int *nums, int start, int end)
{if (start == end) {return nums[start];}int dp[end - start + 1];// dp数组初始化dp[0] = nums[start];dp[1] = maxFun(nums[start], nums[start + 1]);for (int i = 2; i <= end - start; i++) {dp[i] = maxFun(dp[i - 1], dp[i - 2] + nums[start + i]);}return dp[end - start];
}int rob(int* nums, int numsSize) {if (numsSize == 0) {return 0;}if (numsSize == 1) {return nums[0];}int result1 = rangeFun(nums, 0, numsSize - 2);int result2 = rangeFun(nums, 1, numsSize - 1);return maxFun(result1, result2);
}

[337] 打家劫舍III

题目描述

337 打家劫舍III
337 打家劫舍III

解题思路

前提:树上相连的两房屋不能连续盗窃
思路:树形dp, 递归 + 动态规划,后序遍历,考虑两种情况,情况一: 考虑偷该结点, 该子节点均不能偷,情况二: 不考虑偷该结点,该子节点可以考虑偷,此时子节点可偷可不偷,取两者较大值
重点:递归 + 动态规划,推导公式

代码实现

C语言
树形dp
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/// 树形dp, 递归 + 动态规划
// 后序遍历 考虑两种情况
// 情况一: 考虑偷该结点, 该子节点均不能偷
// 情况二: 不考虑偷该结点,该子节点可以考虑偷int maxFun(int p1, int p2)
{return p1 > p2 ? p1 : p2;
}void traversal(struct TreeNode *root, int *dp)
{// 退出条件if (root == NULL) {dp[0] = 0;dp[1] = 0;return ;}// 后序遍历, 左右中int leftDp[2];int rightDp[2];// 初始化dp数组for (int i = 0; i < 2; i++) {leftDp[i] = 0;rightDp[i] = 0;}if (root->left) {traversal(root->left, leftDp);}if (root->right) {traversal(root->right, rightDp);}// 情况一: 考虑偷该结点, 该子节点均不能偷dp[1] = root->val + leftDp[0] + rightDp[0];// 情况二: 不考虑偷该结点,该子节点可以考虑偷dp[0] = maxFun(leftDp[0], leftDp[1]) + maxFun(rightDp[0], rightDp[1]);return ;
}int rob(struct TreeNode* root) {// 0 - 考虑不偷该结点, 1 - 考虑偷该结点int dp[2];// 后序遍历traversal(root, dp);return maxFun(dp[0], dp[1]);
}

今日收获

  1. 动态规划
  2. 递归 + 动态规划

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】--操作符详解

&#x1f32d;个人主页: 起名字真南 &#x1f37f;个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 &#xff1a;2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术&#xff0c;可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法&#xff0c;特别适合于展示变量之间的相关性&#xff0c;对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先&#xff0c;确保你已经安装了matplotlib…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 &#xff08;1&#xff09;封装 &#xff08;2&#xff09;继承 &#xff08;3&#xff09;多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际&#xff0c;算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业&#xff0c;华院计算在人工智能的广阔天地中&#xff0c;不断探索、创新&#xff0c;致力于将算法的潜力发挥到极致。在过去的时日里&#xff0c;华院计算不断探索…

Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费

在跨操作系统环境下使用外部存储设备时&#xff0c;特别是当Windows系统的U盘被连接到Mac电脑时&#xff0c;常常会遇到文件系统兼容性的问题。由于Mac OS原生并不完全支持对NTFS格式磁盘的读写操作&#xff0c;导致用户无法直接在Mac上向NTFS格式的U盘或硬盘写入数据。下面我们…

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中&#xff0c;批处理任务是不可或缺的一部分。它们通常用于处理大量数据&#xff0c;如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分&#xff0c;专为批处理任务设计&#xff0c;提供了简化的配置和强大的功能。本文将介绍如何使用Spr…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 排序是一种基本的数据处理操作&#xff0c;它涉及将一系列项目重新排列&#xff0c;以便按照指定的标准&#xff08;通常是数值大小&#xff09;进行排序。在C语言中&#xff0c;排序算法是用来对元素进行排序的一系…

【高性能服务器】服务器概述

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 服务器概述 服…

DDMA信号处理以及数据处理的流程---聚类

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

静态链表详解(C语言版)

顺序表和链表的优缺点 顺序表和链表是两种基本的线性数据结构&#xff0c;它们各自有不同的优缺点&#xff0c;适用于不同的应用场景。 顺序表&#xff08;Sequential List&#xff0c;通常指数组&#xff09; 优点&#xff1a; 随机访问&#xff1a;可以通过索引快速访问任…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion&#xff0c;今天看了篇文章图像合成不用diffusion&#xff0c;你说说这~ 传送门&#xff1a;【技术追踪】SDSeg&#xff1a;医学图像的 Stable Diffusion 分割&#xff08;MICCAI-2024&#xff09; UNest&#xff1a;UNet结构的Transforme…

Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时&#xff0c;用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull&#xff0c;但是敲着敲着发现不对劲&#xff0c;怎么没有nonNull方法?? 其实时我少敲了一个s&#xff0c;当时自己并没有很清楚Object和Objects两者之前的区别&#xf…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档&#xff0c;这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用&#xff0c;对于roles的使用&#xff0c;也仅涉及到tasks和files目录&#xff0c;方便大家快速上手并规范化管理。 0.环境配置…

波音危机:星际客机飞船故障,宇航员被困太空!马斯克的SpaceX的“龙”飞船来救援?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 在人类探索宇宙的漫漫征途中&#xff0c;波音公司的“星际客机”承载着无限的希望与梦想&#xff0c;却也面临着前所未有的挑战。从原计划的8天…

pdf已加密如何解除?解密密码的两个方法【可加密】

电脑文件加密的目的就是保护重要信息&#xff0c;防止数据泄露。如果需要解除密码&#xff0c;应该如何操作呢&#xff1f;pdf已加密如何解除&#xff1f;本文整理了以下两种解除文件方法&#xff0c;希望能够帮到有需要的朋友们&#xff01; 方法一、使用金舟文件夹加密大师解…

实验八 T_SQL编程

题目 以电子商务系统数据库ecommerce为例 1、在ecommerce数据库&#xff0c;针对会员表member首先创建一个“呼和浩特地区”会员的视图view_hohhot&#xff0c;然后通过该视图查询来自“呼和浩特”地区的会员信息&#xff0c;用批处理命令语句将问题进行分割&#xff0c;并分…

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…

【嵌入式DIY实例】-Nokia 5110显示BME280传感器数据

Nokia 5110显示BME280传感器数据 文章目录 Nokia 5110显示BME280传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建一个简单的本地气象站。 NodeMCU 从 BME280 传感器读取温度、湿度和压力值…

Java学习 - 布隆过滤器

前置需求 需求 已经有50亿个电话号码&#xff0c;现在给出10万个电话号码&#xff0c;如何快速准确地判断这些电话号码是否已经存在&#xff1f; 参考方案 通过数据库查询&#xff1a;比如MySQL&#xff0c;性能不行&#xff0c;速度太慢将数据先放进内存&#xff1a;50亿*8字…