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

目录

  • 738.单调递增的数字
    • 思路
    • 代码
  • 968.监控二叉树
    • 思路
    • 代码

738.单调递增的数字

题目链接:704. 二分查找

文档讲解:代码随想录

视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字

思路

数要尽可能的大,高位开始尽量不变,从低位开始找到不满足递减的第一个位置,当前位置减1,后面的全都变成9即可。

代码

class Solution {
public:int monotoneIncreasingDigits(int n) {string strNum = to_string(n);int idx;for (int i = strNum.size() - 1; i > 0; i--) {if (strNum[i - 1] > strNum[i]) {strNum[i] = '9';strNum[i - 1]--;}}return stoi(strNum);}
};

968.监控二叉树

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

文档讲解:代码随想录

视频讲解:贪心算法,二叉树与贪心的结合,有点难… LeetCode:968.监督二叉树

思路

很容易想到要从叶子结点的父节点开始每隔两个结点放一个摄像头为局部最优,但是怎样表示一个结点的状态(有摄像头,没有摄像头但被摄像头覆盖,没有摄像头也没有被摄像头覆盖)是个难点。

后序遍历递归返回值选择int型,返回012,其中0表示没有摄像头也没有被摄像头覆盖,1表示有摄像头,2表示没有摄像头但被摄像头覆盖。

空结点处理:

  • 如果空结点是未被覆盖状态,这时叶子结点就需要放摄像头,不是局部最优;
  • 如果空结点是有摄像头状态,这时叶子结点被覆盖,叶子结点的父节点不用放置摄像头,而父节点的父节点放置摄像头,这时叶子结点没有被覆盖;
  • 如果空结点是被覆盖状态,则叶子结点不用放置摄像头,叶子结点的父节点放置摄像头即可,是局部最优。

分四种情况:

  • 情况一:左右结点都有覆盖,这时当前结点不用放置摄像头,当前节点的父结点放置摄像头,返回0
  • 情况二:左右结点至少有一个未被覆盖,这时当前结点需要放置摄像头,返回1
  • 情况三:左右结点至少有一个摄像头,且另一个结点被覆盖,这时当前结点不需要放置摄像头,且被左右结点覆盖,返回2
  • 情况四:如果递归完后,根结点没有被覆盖,则根结点也需要放置一个摄像头

代码

class Solution {
public:int minCameraCover(TreeNode *root) {// 情况4if (traversal(root) == 0)// root无覆盖result++;return result;}private:int result = 0;int traversal(TreeNode *node) {// 空结点,该结点有覆盖if (node == NULL)return 2;int left = traversal(node->left);int right = traversal(node->right);// 情况1// 左右结点都有覆盖,则该节点放置摄像头if (left == 2 && right == 2)return 0;// 情况2// 左右结点至少有一个没有覆盖// left == 0 && right == 0 左右节点无覆盖// left == 1 && right == 0 左节点有摄像头,右节点无覆盖// left == 0 && right == 1 左节点有无覆盖,右节点摄像头// left == 0 && right == 2 左节点无覆盖,右节点覆盖// left == 2 && right == 0 左节点覆盖,右节点无覆盖if (left == 0 || right == 0) {result++;return 1;}// 情况3// left == 1 && right == 2 左节点有摄像头,右节点有覆盖// left == 2 && right == 1 左节点有覆盖,右节点有摄像头// left == 1 && right == 1 左右节点都有摄像头// 其他情况前段代码均已覆盖if (left == 1 || right == 1)return 2;return -1;}
};

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

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

相关文章

园区智慧化转型新篇章:解码智慧技术如何助力园区实现精细化管理,提升运营效率

目录 一、智慧技术概述及其在园区管理中的应用 (一)物联网技术的应用 (二)大数据技术的应用 (三)云计算技术的应用 二、智慧技术助力园区实现精细化管理 (一)实现资源优化配置…

SqlServer 查询表、视图、存储过程被哪些引用

1.查询表、视图、存储过程在哪些视图、存储过程、函数中被使用 SELECT DISTINCT OBJECT_NAME(id) name FROM syscomments WHERE id IN ( SELECT idFROM sysobjectsWHERE type IN ( V, P ,TF) ) --V表示视图,P表示存储过程,TF表示函数AND (te…

OpenAI“VoiceEngine”震撼来袭,深度合成算法备案需抓紧

近日,OpenAI在官网首次展示了其全新自定义音频模型“VoiceEngine”,这一技术突破令人瞩目。通过仅提供15秒左右的参考声音,VoiceEngine便能生成几乎与原音一模一样的全新音频,无论是在清晰度、语音连贯性、音色还是自然度方面&…

轻松上手,无缝对接:详述如何接入企讯通空号检测接口API

企讯通空号检测接口API作为一款高效、精准的手机号码状态检测工具,能够帮助企业及开发者快速识别手机号码的有效性,优化通讯资源,提升营销效果。本篇文章将带领您一步步了解如何轻松、无缝地对接企讯通空号检测接口API,让您的业务…

【RAG 论文】Adaptive-RAG:自适应地根据 query 难度来选择合适的 RAG 模型

论文:Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity ⭐⭐⭐⭐ Code:github.com/starsuzi/Adaptive-RAG NAACL 2024,arXiv:2403.14403 文章目录 一、论文速读二、实现细节2.1 三种…

c++-msys2程序工作原理?

文章目录 1. 子系统:2. MinGW-w64:3. Pacman 包管理器:4. POSIX 兼容性: MSYS2 是一个为 Windows 用户设计的 Unix-like 开发环境和命令行接口,它允许用户在 Windows 上编译和运行许多原本为类 Unix 系统设计的软件。M…

使用FPGA实现逐级进位加法器

介绍 逐级进位加法器就是将上一位的输出作为下一位的进位输入,依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构,应该很容易理解吧。 下面我也列举了一位加法器,可以看下。 电路结构 设计文件 1位加法器 librar…

Docker 的数据管理 端口映射 容器互联 镜像的创建

目录 概念 概念 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。总结:因为容器数据是临时保存的为了安全,就要让数据保持持久化。 1&#…

OceanBase单机版安装体验

前情提要 上周OceanBase开发者大会过后,作为观察员也来体验一下OB的安装。业内有某个国产安装用了两周,这种其实有点劝退了。话说就是10年前,没搞过Oracle的人也不用两周安装一个数据库啊。今天看看OB的(一体化)安装。…

计算机网络----第十三天

DNS协议和文件传输协议 DNS: 含义:用于域名和IP地址的互相解析 DNS域名: 背景:通过IP地址访问目标主机,不便于记忆 域名的树形层次化结构: ①根域 ②顶级域:主机所处的国家/区域&#xf…

一纸歉文难挽人心,特步站在了“悬崖边”

撰稿|多客 来源|贝多财经 日前,一场马拉松赛事风波把特步推上了舆论风口。 此次事件说起来也并不复杂,在4月14日举办的2024北京半程马拉松赛最后冲刺的几百米,几位外籍选手在超过何杰后,对何杰做出回头看、摆手示意的动作&…

【Python】使用Python连接ClickHouse进行批量数据写入

有许多时候 眼泪就要流 那扇窗是让我 坚强的理由 小小的门口 还有她的温柔 给我温暖陪伴我左右 曾经的乡音 悄悄地隐藏 说不出的诺言 一直放心上 🎵 李健《异乡人》 在本教程中,我们将探讨如何使用Python连接到ClickHouse数据库&am…

谁是存储器市场下一个“宠儿”?

AI浪潮对存储器提出了更高要求,高容量、高性能存储产品重要性正不断凸显,存储产业技术与产能之争也因此愈演愈烈:NAND Flash领域,闪存堆叠层数持续提升;DRAM领域HBM持续扩产,技术不断迭代,同时3…

Spring 5源码学习

文章目录 一. 访问[spring官网], 找到Spring Framework,点击红色标记github仓库,下载对应的分支代码,本人下载5.1.x二. 安装gradle三. 调整spring-framework配置四. 开始编译五.导入idea 一. 访问[spring官网], 找到Spring Framework&#xf…

【STM32+HAL+Proteus】系列学习教程---ADC(查询、中断、DMA模式下的电压采集)

实现目标 1、学会STM32CubeMX软件关于ADC的配置 2、掌握ADC三种模式(查询、中断、DMA)编程 3、具体目标:1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 一、ADC 概述 1、什么是ADC? ADC(Analog to Digit…

【课程发布】软考高项目十大管理ITTO宫殿记忆法新版第四版正式发布

软考高项十大管理ITTO宫殿记忆法视频课程: 平台:荔枝微课 连接:十方教育 各位软考高级信息系统项目管理师考生好,新版第四版十大管理ITTO宫殿记忆法视频课程终于发布了,之前苦等的考生终于迎来了救星,再也…

浅谈数据模型

1:事实表和维表的概述 前言:数据仓库是一种用于存储和管理大量数据的技术。其中,事实表和维表是数据仓库中的两个重要概念,首先了解一下事实表和维度表 1.事实表:是指用于存储测量“事实数据”的表,事实数…

算法学习笔记Day8——回溯算法

本文解决几个问题: 回溯算法是什么?解决回溯算法相关的问题有什么技巧?回溯算法代码是否有规律可循? 一、介绍 1.回溯算法是什么? 回溯算法就是个多叉树的遍历问题,关键在于在前序和后序时间点做一些操作…

Java基础入门day35

day35 js 简介 js:JavaScript,是一种解释性语言,动态类型、弱类型的计算机语言 它的解释器被称之为JavaScript引擎,作为浏览器的一部分,广泛用于客户端脚本语言,用来给html网页增加动态功能 问题描述&…

记录如何用php删除一段文字中的指定文字

在PHP中,删除一段文字中的指定文字可以通过使用str_replace()函数来实现。这个函数可以替换字符串中的某些字符或字符串,如果你想要删除特定的文字,可以将它们替换为空字符串。 以下是使用str_replace()函数删除指定文字的基本语法&#xff…