代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树

目录

题目链接:738.单调递增的数字

思路

代码

题目链接:968.监控二叉树

思路

代码

总结


题目链接:738.单调递增的数字

思路

        既然是求单调递增的数字,要判断相邻数字之间的大小关系。有两种遍历顺序,从前往后和从后往前。如果是从前往后,当后面的数字修改时,前面的数字可能会大于后面的数字,不满足单调递增,还要再次从前往后遍历修改。所以使用从后往前的遍历,当后面的数字小于前面的数字时,将前面的数字进行减一的操作,后面的数字改为9。例如332,2<3,则3减一变成2,后面的2变成9,329,此时2<3,继续重复上述操作变成299,得到最后结果。

代码

class Solution {
public:int monotoneIncreasingDigits(int n) {string strNum =to_string(n); // 为了方便处理每一位上的数字,将其转换成字符串int flag = strNum.size(); // 用来标记从哪一位开始后面的数字改成9for (int i = strNum.size() - 1; i > 0; i--) {// 前一位数字大于当前数字时,不满足递增要求,进行修改if (strNum[i - 1] > strNum[i]) {flag = i;        // 记录此时的位置strNum[i - 1]--; // 前一位数字减一}}for (int i = flag; i < strNum.size(); i++) {strNum[i] = '9';}return stoi(strNum); // 将字符串转换成int型整数返回}
};

题目链接:968.监控二叉树

思路

        一个摄像头可以监控上中下三层,为了使用更少的摄像头,我们尽可能把摄像头放在中间。对于二叉树首先要确定遍历顺序,因为叶子比根节点多,所以使用后序遍历,从叶子节点开始遍历,先满足大多数节点摄像头数量最少。

        其次,既然求最少的摄像头数量,就要明确每个节点到底是什么状态,其实状态无外乎三种:没被监控覆盖0,有摄像头1,被监控覆盖2。

        然后就是处理逻辑,也有以下几种情况

                ①孩子节点都为2,则父节点没被覆盖,返回0

                ②有一个孩子为0,则父节点需要放摄像头,返回1

                ③有一个孩子为1,则父节点被覆盖,返回2

                ④根节点没被覆盖,递归到根节点结束,无法赋值状态,所以单独处理

        需要注意的点,空节点的处理,遇到空节点应该返回2,被覆盖,不影响最终摄像头的数量

代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/
class Solution {
public:// 节点状态// 有摄像头1,被监控覆盖2,没被监控覆盖0int result = 0; // 记录摄像头个数// 递归遍历二叉树int traversal(TreeNode* cur) {if (cur == NULL)return 2; // 空节点返回2// 后序遍历,左右中int left = traversal(cur->left);int right = traversal(cur->right);// 四种情况// 1.孩子节点都为2,则父节点没被覆盖,返回0// 2.有一个孩子为0,则父节点需要放摄像头,返回1// 3.有一个孩子为1,则父节点被覆盖,返回2// 4.根节点没被覆盖,递归到根节点结束,无法赋值状态,所以单独处理if (left == 2 && right == 2)return 0; // 情况1if (left == 0 || right == 0) {result++;return 1; // 情况2}if (left == 1 || right == 1)return 2; // 情况3return -1;}int minCameraCover(TreeNode* root) {if (root == NULL)return result;if (traversal(root) == 0)result++; // 情况4return result;}
};

总结

        ①贪心算法的题目总体上的思路时局部最优推全局最优,但是题目灵活,需要多刷多练

        ②贪心算法作为一种思路,可以应用到各种章节的题目上,还是需要熟练数据结构

        ③基础函数调用。int转字符串to_string(),string转int,stoi()

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

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

相关文章

面向对象练习坦克大兵游戏

游戏玩家&#xff08;名称&#xff0c;生命值&#xff0c;等级&#xff09;&#xff0c;坦克&#xff0c;大兵类&#xff0c;玩家之间可以相互攻击&#xff0c;大兵拥有武器&#xff0c;用枪弹和反坦克炮弹&#xff0c;造成攻击不同&#xff0c;坦克攻击值固定&#xff0c;请设…

设计模式-六大原则

设计模式的六大原则是软件工程中的基本概念&#xff0c;使得构建可维护、可扩展和可重用的代码。 1.单一职责原则&#xff08;Single Responsibility Principle&#xff09;&#xff1a;一个类或方法应该只有一个引起变化的原因&#xff0c;确保类或模块的功能高度内聚。 案例&…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

如何看待AIGC技术?

AIGC原名&#xff08;Artificial Intelligence Generated Content&#xff09; 技术是一种利用人工智能来自动生成内容的技术&#xff0c;这包括文本、图像、音频和视频等多种形式的创作。AIGC技术的发展标志着人工智能从1.0时代进入2.0时代的重大转变&#xff0c;它不仅体现了…

多线程优化人脸识别时遇到的问题

项目&#xff1a; face 遇到的问题&#xff1a; 其中一个线程报错&#xff0c;然后不返回相应的数据信息 问题思考&#xff1a; 每个线程独立执行&#xff0c;当其中一个线程报错后&#xff0c;随之这个线程不往下执行&#xff0c;但是其他线程还是正确执行的。 解决&…

【SpringBoot整合系列】SpringBoot整合JPA

目录 前期回顾ORM解决方案 JPA简介JPA的组成技术ORM映射元数据Java持久化API查询语言&#xff08;JPQL&#xff09; JPA的优势JPA的缺点 Spring Data JPASpring Data JPA简介Spring Data 家族Spring Data JPA、JPA和其他框架之间的关系 SpringBoot整合JPAJPA的核心注解1.依赖2.…

element-ui upload 组件 手动多次出发 submit

element 上传组件 upload 上传成功以后&#xff0c;想重新 调用 submit()函数&#xff0c;发现是不可以进行多次触发的,。 直接上解决方法&#xff0c;在上传成功后的钩子函数里添加:fileList[0l.status ready fileList是文件列表&#xff0c;status是单文件的状态改成ready就…

【Fastadmin】表格导出excel,图片显示太大

目录 1.直接导出示例 2.解决办法 3. 再次导出效果 1.直接导出示例 图片过大&#xff0c;格式错乱 2.解决办法 在js页面加入代码 // 导出图片过大处理 exportOptions: {ignoreColumn: [0, operate],onBeforeSaveToFile: function (data, fileName, type, charset, encoding,…

《深入Linux设备驱动程序内核机制》学习笔记-第4章

前言 本文是《深入Linux设备驱动程序内核机制》的读书笔记&#xff0c;本文因为是读书笔记所以抄写引用了该书中的大量内容&#xff0c;写读书笔记的目的是在写作的过程中加深对书中内容的理解。 建议读者直接阅读《深入Linux设备驱动程序内核机制》&#xff0c;这本书是Linu…

代码随想录三刷day47

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣115. 不同的子序列二、力扣583. 两个字符串的删除操作三、力扣72. 编辑距离 前言 本周我们讲了动态规划之终极绝杀&#xff1a;编辑距离&#xff0c;为…

阿里云服务器部署wordpress站点

步骤如下&#xff1a; 安装宝塔登录宝塔&#xff0c;安装wordpress环境新建站点&#xff0c;新建的时候只输入ip地址就可以&#xff0c;再创建一个数据库dev1在站点文件夹中传入wordpress&#xff0c;更改站点的配置文件&#xff0c;将工作目录xxx改成xxx/wordpress修改wordpr…

浅谈 操作系统

文章目录 一、什么是操作系统1.1、对下&#xff0c;要管理各种硬件设备1.2、对上&#xff0c;要给各种软件提供一个稳定的运行环境 二、常见的操作系统有哪些 一、什么是操作系统 操作系统 其实就是一个 软件(software)。是一个用来进行 管理 的软件。进行什么样的管理呢&…

mPEG-Dansyl,Methoxy PEG Dansyl由甲氧基-聚乙二醇(mPEG)和丹磺酰氯(Dansyl)两部分组成

【试剂详情】 英文名称 mPEG-Dansyl&#xff0c;Methoxy PEG Dansyl 中文名称 聚乙二醇单甲醚丹磺酸酯&#xff0c;甲氧基-聚乙二醇-丹磺酰胺 外观性状 由分子量决定&#xff0c;液体或者固体 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k…

OceanBase v4.2 特性解析:Auto DOP

我们常会使用并行执行来缩短查询时间&#xff0c;以满足业务对加速查询的需求。那么&#xff0c;如何确定合适的并行资源量呢&#xff1f;在优化器中&#xff0c;并行资源量可以通过并行度&#xff08;DOP&#xff1a;Degree of Parallelism&#xff09;这来衡量。在实际业务场…

前端发送请求,显示超时取消

前端发送请求&#xff0c;显示超时取消 问题说明&#xff1a;后台接口请求60s尚未完成&#xff0c;前端控制台显示取消&#xff08;canceled&#xff09; 原因 1、前端设置60s超时则取消 2、后台接口响应时间过长&#xff0c;过长的原因统计的数据量多&#xff08;实际也才17…

react项目,文件夹和组件命名,有什么好的规范

在React项目中&#xff0c;文件夹和组件的命名规范对于保持代码的可读性和可维护性至关重要。以下是一些建议的规范&#xff1a; 文件夹命名规范 1、使用小写字母&#xff1a; 所有文件夹名称都应使用小写字母&#xff0c;避免使用大写字母或特殊字符。 2、使用短而描述性的…

LLM 安全 | 大语言模型应用安全入门

一、背景 2023年以来&#xff0c;LLM 变成了相当炙手可热的话题&#xff0c;以 ChatGPT 为代表的 LLM 的出现&#xff0c;让人们看到了无限的可能性。ChatGPT能写作&#xff0c;能翻译&#xff0c;能创作诗歌和故事&#xff0c;甚至能一定程度上做一些高度专业化的工作&#x…

BUUCTF-Misc20

[ACTF新生赛2020]NTFS数据流1 1.打开附件 是一堆文件&#xff0c;随便打开一个内容是flag不在这 2.pyton脚本 编写查找文件夹下一堆文件中那个文件藏有flag的Python脚本 import os def search_flag_files(folder_path, flag): flag_files [] for root, dirs, files …

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程 &#x1f4cd;相关篇《HAL STM32 I2C方式读取MT6701磁编码器获取角度例程》&#x1f4cc;当前最新MT6701数据手册&#xff1a;https://www.magntek.com.cn/upload/MT6701_Rev.1.8.pdf&#x1f4dc;SSI协议读角度&#xff…

【stomp实战】搭建一套websocket推送平台

前面几个小节我们已经学习了stomp协议&#xff0c;了解了stomp客户端的用法&#xff0c;并且搭建了一个小的后台demo&#xff0c;前端页面通过html页面与后端服务建立WebSocket连接。发送消息给后端服务。后端服务将消息内容原样送回。通过这个demo我们学习了前端stomp客户端的…