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

代码随想录day39 动态规划7

打家劫舍

题目:198.打家劫舍  213.打家劫舍II   337.打家劫舍III

需要重做:全部

198.打家劫舍

思路:第i个房子偷与不偷,取决于第i-2个房子和第i-1个房子

注意:注意下标的一致性。现在的下标含义是房子的下标,而不是第几个房子。(也可以更改)

五部:

1.dp[i]:在第i个房子时,最多的钱

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

3.由递推式,知道要初始化dp0和dp1

4.从前到后遍历。

代码:

class Solution {
public:int rob(vector<int>& nums) {int n=nums.size();if(n==1)return nums[0];if(n==2)return max(nums[0],nums[1]);vector<int>dp(n,0);dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);for(int i=2;i<n;i++){dp[i]=max(dp[i-1],dp[i-2]+nums[i]);}return dp[n-1];}
};

213.打家劫舍II

思路:在上题基础上,增加了环形。所以分成三种情况:

1.不含首尾元素;

2.可能包含首元素不含尾元素

3.可能包含尾元素不含首元素

利用198的函数即可

注意:其中,情况2 和情况3 都包含了情况1,所以情况1在计算中可以忽略

代码:

class Solution {
public:int rob(vector<int>& nums) {int n=nums.size();if(n==1)return nums[0];if(n==2)return max(nums[0],nums[1]);int res1=robhomes(nums,0,n-2);int res2=robhomes(nums,1,n-1);return max(res1,res2);}int robhomes(vector<int>&nums,int start,int end){int n=end-start+1;if(n==1)return nums[start];if(n==2)return max(nums[start],nums[start+1]);vector<int>dp(n,0);dp[0]=nums[start];dp[1]=max(nums[start],nums[start+1]);for(int i=2;i<n;i++){dp[i]=max(dp[i-1],dp[i-2]+nums[start+i]);}return dp[n-1];}
};

337.打家劫舍III    --树形dp

思路:就是从树根节点出发,决定每个节点是偷还是不偷。结合了树的遍历和动规。因为需要左右 的值来决定中间的值,所以选择后序遍历。

注意:

树的分析:

1.参数,返回值:应该return一个两个元素的数组,分别代表偷当前节点和不偷当前节点的值。参数为树节点

2.终止条件:遇到空节点return(0,0),遇到叶子返回(叶子val,0)

3.遍历顺序:后序遍历,因为需要左右的值。且需要记录左右的值

vector<int>left=rob(root->left) 

4.单层逻辑:val1=cur->val+left(1)+right(1):偷该节点

val2=max(left[0],left[1])+max(right[0].right[1]);不偷该节点(可以选择左右孩子偷还是不偷,选最大 的)

最后return(val1,val2)

代码:

class Solution {
public:int rob(TreeNode* root) {vector<int>res=robTree(root);return max(res[0],res[1]);}vector<int>robTree(TreeNode*cur){if(cur==nullptr)return {0,0};//(偷该节点,不偷该节点)if(cur->left==nullptr&&cur->right==nullptr)return{cur->val,0};vector<int>left=robTree(cur->left);vector<int>right=robTree(cur->right);int val1=cur->val+left[1]+right[1];int val2=max(left[0],left[1])+max(right[0],right[1]);return {val1,val2};}
};

相关文章:

代码随想录day39 动态规划7

打家劫舍 题目&#xff1a;198.打家劫舍 213.打家劫舍II 337.打家劫舍III 需要重做&#xff1a;全部 198.打家劫舍 思路&#xff1a;第i个房子偷与不偷&#xff0c;取决于第i-2个房子和第i-1个房子 注意&#xff1a;注意下标的一致性。现在的下标含义是房子的下标&#x…...

ESP32-S3模组上实现低功耗(5)

接前一篇文章:ESP32-S3模组上实现低功耗(4) 本文内容参考: 系统低功耗模式介绍 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 电源管理 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档...

PDF转文本以及转图片:itextpdf

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; 1. itextpdf1.1导入itextpdf的maven依赖1.2 提取文本代码1.3 pdf转换成图片代码&#xff08;本地图片地址还是线上PDF的URL地址均支持&#…...

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl...

移动端自动化测试Appium-java

一、Appium的简介 移动端的自动化测试框架 模拟人的操作进行功能自动化常用于功能测试、兼容性测试 跨平台的自动化测试 二、Appium的原理 核心是web服务器&#xff0c;接受客户端的连接&#xff0c;接收客户端的命令&#xff0c;在手机设备上执行命令&#xff0c;收集命令…...

IO: 作业:Day1

思维导图 main.c #include"student.h" int main(int argc, const char *argv[]) { stuPtr hcreat(); int n0; add_node(h); add_node(h); add_node(h); show(h); save(h,"student.txt"); stuPtr ptrc…...

ue5 替换角色的骨骼网格体和动画蓝图

一开始动画蓝图&#xff0c;骨骼网格体都是用的女性角色 现在把它换成男性 编译 保存 运行 把动画类换成ABP_Manny 进入ABP_Manny中 进入到idle 找到这个拖进来 编译 就变成站着端枪 运行一下&#xff0c;没有问题...

el-cascader 树状选择-点击父级禁用子级

背景&#xff1a;项目上需要实现树状选择&#xff0c;点击父级禁用子级的功能&#xff0c;element组件本身没有该配置项说明&#xff1a;需要实现几个功能点&#xff1a;点击父级禁用子级&#xff1b;再次点击取消禁用&#xff1b;仅回填所选级&#xff1b;上下级不关联实现代码…...

AWS re:Invent 的创新技术

本月早些时候&#xff0c;Amazon 于 12 月 1 日至 5 日在内华达州拉斯维加斯举行了为期 5 天的 re&#xff1a;Invent 大会。如果您从未参加过 re&#xff1a;Invent 会议&#xff0c;那么最能描述它的词是“巨大”——不仅从与会者人数&#xff08;60,000 人&#xff09;来看&…...

PHP7和PHP8的最佳实践

php 7 和 php 8 的最佳实践包括&#xff1a;使用类型提示以避免运行时错误&#xff1b;利用命名空间组织代码并避免命名冲突&#xff1b;采用命名参数、联合类型等新特性增强可读性&#xff1b;用错误处理优雅地处理异常&#xff1b;关注性能优化&#xff0c;如避免全局变量和选…...

Debian、Ubuntu 22.04和ubuntu 24.04国内镜像源(包括 docker 源)

Debian 更换国内清华源 1、备份原文件mv /etc/apt/sources.list /etc/apt/sources.list.old 2、写入新源&#xff0c;以下是 Debian 11 的&#xff1a; cat > /etc/apt/sources.list << EOF deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib…...

点亮一个esp32 的led

最近入了一个ESP32 兄弟们&#xff0c;这玩意还可以&#xff0c;买来肯定是给它点亮啊对吧 我就是点灯侠&#x1f387; &#x1f62d;千万不要不接天线啊&#xff0c;不然你会一直找不到你的wifi 1.点灯第一步你得有IDE Arduino 就是这个绿东西 可是怎么下载安装呢&#xff…...

C++ shared_ptr进一步认知,为什么引用计数>2退出作用域都可以调用析构

1.使用智能指针需要#include <memeroy> 2.上代码&#xff1a; #include <memory> #include <iostream> using namespace std; struct lifePeriod {lifePeriod():a(1){cout << "无参构造&#xff01;" << endl;}virtual ~lifePeriod(…...

JavaScript代码片段二

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... JavaScript统计文字个数、特殊字符转义、动态插入js代码、身份证验证 统计文字个数 f…...

【计算机视觉】单目深度估计模型-Depth Anything-V2

概述 本篇将简单介绍Depth Anything V2单目深度估计模型&#xff0c;该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比&#xff0c;V2版本通过采用合成图像训练、增加教师模型容量&#xff0c;并利用大规模伪标签现实数据进行学…...

Servlet 和 Spring MVC:区别与联系

前言 在 Java Web 开发中&#xff0c;Servlet 和 Spring MVC 是两个重要的技术。Servlet 是 Java Web 的基础组件&#xff0c;而 Spring MVC 是一个高级 Web 框架&#xff0c;建立在 Servlet 的基础之上&#xff0c;提供了强大的功能和易用性。这篇文章将从定义、原理、功能对…...

【期末复习】三、内存管理

1.物理内存管理 空闲内存管理方式主要分为:等长划分和不等长划分。 内存管理方式 单一连续分区 基本思想:一段时间内只有一个进程在内存。 特点:简单,内存利用率低, 有三种不同的布局: 固定分区 把内存空间分割成若干区域, 称为分区。 每个分区的大小可以相同也可…...

Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务

目录 前言1. Azure Cosmos DB 简介1.1 什么是 Azure Cosmos DB&#xff1f;1.2 核心技术特点 2. 数据模型与 API 支持2.1 文档存储&#xff08;Document Store&#xff09;2.2 图数据库&#xff08;Graph DBMS&#xff09;2.3 键值存储&#xff08;Key-Value Store&#xff09;…...

【Docker】安装registry本地镜像库,开启Https功能

下载镜像 docker pull registry:2 需要启动https功能&#xff0c;就要生成服务端的自签名的证书和私钥&#xff0c;以及在docker客户端安装这个经过签名的证书。 第一步&#xff1a;生成公私钥信息&#xff0c;第二步&#xff0c;制作证书签名申请文件&#xff0c; 第三步&…...

JUC--线程池

线程池 七、线程池7.1线程池的概述7.2线程池的构建与参数ThreadPoolExecutor 的构造方法核心参数线程池的工作原理 Executors构造方法newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPool(int corePoolSize) 为什么不推荐使用内置线程池&…...

Python实战:四种常见滤波器(低通、高通、带通、带阻)的设计与实现

1. 信号处理中的滤波器基础 第一次接触信号处理时&#xff0c;我被各种滤波器搞得晕头转向。直到有一次在调试音频设备时&#xff0c;发现麦克风采集的声音总是带有嗡嗡的杂音&#xff0c;这才真正理解了滤波器的重要性。滤波器就像是一个智能筛子&#xff0c;能够帮我们分离出…...

我不是狐狸,我是那Harness Engineering闹

Julia&#xff08;julialang.org&#xff09;由Stefan Karpinski、Jeff Bezanson等在2009年创建&#xff0c;目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是&#xff1a; 高性能&#xff1a;编译型语言&#xff08;JIT&#xff0…...

能量函数结合人工智能的新能源并网系统次/超同步振荡源定位研究

能量函数结合人工智能的新能源并网系统次/超同步振荡源定位研究 摘要 随着风电、光伏等新能源的大规模并网,电力系统次/超同步振荡问题日益突出,严重威胁电网的安全稳定运行。精准定位振荡源是实施有效抑制措施的关键前提。本文提出一种融合能量函数分析与人工智能技术的次…...

用DDRNet-23-slim在RTX 3060笔记本上搞定细胞图像分割:从数据标注到模型测试的完整避坑记录

在RTX 3060笔记本上实现细胞图像分割&#xff1a;DDRNet-23-slim实战全流程解析 当我在生物实验室第一次看到显微镜下的细胞图像时&#xff0c;立刻被那些复杂的结构吸引了。作为一名刚接触医学图像处理的研究生&#xff0c;我迫切希望能用AI技术自动识别不同类型的细胞。但实验…...

单片机低功耗设计避坑指南:从SPI片选信号到MCU空闲模式配置

单片机低功耗设计避坑指南&#xff1a;从SPI片选信号到MCU空闲模式配置 在物联网设备井喷式发展的今天&#xff0c;电池供电设备的续航能力成为产品竞争力的关键指标。一位资深工程师曾分享过这样的经历&#xff1a;他们团队开发的智能农业传感器在实验室测试时续航可达6个月&a…...

Obsidian科研知识管理架构:构建高效学术工作流的本地化解决方案

Obsidian科研知识管理架构&#xff1a;构建高效学术工作流的本地化解决方案 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_template_fo…...

为什么你的游戏手柄需要这个神奇驱动?ViGEmBus让所有设备变专业控制器

为什么你的游戏手柄需要这个神奇驱动&#xff1f;ViGEmBus让所有设备变专业控制器 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想象一下&#xff0c;你心…...

动手学深度学习——数据集

1. 前言在前面的内容中&#xff0c;我们已经学习了&#xff1a;什么是物体检测什么是边界框边界框如何表示目标的位置但是&#xff0c;仅仅理解这些概念还不够。 如果想真正训练一个物体检测模型&#xff0c;我们还必须解决一个核心问题&#xff1a;训练数据从哪里来&#xff1…...

Sambert语音合成镜像实战:快速搭建智能客服语音播报系统

Sambert语音合成镜像实战&#xff1a;快速搭建智能客服语音播报系统 1. 业务场景与需求分析 在智能客服系统中&#xff0c;语音播报功能直接影响用户体验。传统解决方案通常面临三个核心痛点&#xff1a; 音质机械感强&#xff1a;拼接式语音合成缺乏自然流畅度情感表达单一…...

前端开发趋势分析

前端开发趋势分析&#xff1a;探索未来技术方向 在数字化浪潮的推动下&#xff0c;前端开发作为连接用户与产品的桥梁&#xff0c;正经历着前所未有的变革。从静态页面到动态交互&#xff0c;再到如今的全栈化与智能化&#xff0c;前端技术不断突破边界。本文将分析当前前端开…...