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

news2024/9/20 14:43:48

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

  • 738.单调递增的数字
  • 968.监控二叉树(难)


738.单调递增的数字

教程视频:https://www.bilibili.com/video/BV1Kv4y1x7tP/?spm_id_from=333.788&vd_source=ddffd51aa532d23e6feac69924e20891
在这里插入图片描述
从后向前遍历,一旦前一个数大于后一个数(非递增情况),将前一位数减一,后一位及其之后的数全都变成9。
【注意】
1、不要从前向后遍历,因为数字会变小,不能总是保证前面遍历过的结果保持递增。只有从后向前遍历才能重复利用上次比较的结果。
2、一旦有一位减一后,其后所有位都要变为9,才能保证数值最大,这里只要记录9的最高位。(贪心)

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = n+"";
        char[] c = s.toCharArray();
        int index = c.length;
        for(int i=c.length-1;i>0;i--){
            if(c[i-1]>c[i]){
                c[i-1]=(char)(c[i-1]-1);
                index = i;
            }
        }
        for(int i=index;i<c.length;i++){
            c[i]='9';
        }
        n=0;
        for(int i=0;i<c.length;i++){
            n=n*10+(c[i]-'0');
        }
        return n;
        //利用api,耗时耗空间
        //return Integer.parseInt(String.valueOf(c));
    }
}

968.监控二叉树(难)

教程视频:https://www.bilibili.com/video/BV1SA411U75i/?spm_id_from=333.788&vd_source=ddffd51aa532d23e6feac69924e20891
在这里插入图片描述
在这里插入图片描述
最开始的贪心思路有两种:1、根结点下一层方摄像头;2、叶子节点上一层放摄像头。考虑叶子节点数量远大于根结点数量,省下的摄像头数量更多i,因此采用思路2。

局部最优: 让叶子节点的父节点安摄像头,所用摄像头最少。
整体最优: 全部摄像头数量所用最少!

大体思路就是从低到上,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点。

此时需要确定二叉树的遍历方式,分析后发现当前节点状态需要根据其叶子节点状态推出,因此采用后序(左右中)遍历

同时,设置三个数字来表示节点当前状态:(注意0和2状态之和即为无摄像头状态,不需要在额外设置无摄像头状态)
0:该节点无覆盖(无摄像头)
1:本节点有摄像头
2:本节点有覆盖(无摄像头)

递归终止条件(空节点状态认定):为了保证叶子节点上层节点安装摄像头,空节点应该向上层返回状态2(本节点有覆盖)。

最后考虑递归处理逻辑,节点状态共有四种:

  1. 情况1:左右节点都有覆盖,当前节点返回无覆盖状态,使其上一节点进入情况2;
  2. 情况2:左右节点至少有一个无覆盖的情况,当前节点应该安装摄像头,摄像头+1,返回状态1;
  3. 情况3:左右节点至少有一个有摄像头,当前节点返回状态2;
  4. 情况4:头结点没有覆盖,这个情况最后在主函数中讨论。

【注意】当左右子节点状态为1和0时,应该进入情况情况2的逻辑,给当前节点安装摄像头,因此情况2的判断应该放在情况3前面。

class Solution {
    int camera=0;
    public int minCameraCover(TreeNode root) {
        //情况4
        if(traversal(root)==0){
            camera++;
        }
        return camera;
    }

    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
        if(left==0 || right==0){
            camera++;
            return 1; 
        }
        //情况3
        if(left == 1 || right ==1)return 2;
        return -1;//不会走到这条,仅为满足语法需要
    }
}

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

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

相关文章

Pytorch环境下基于Transformer的滚动轴承故障诊断

关于python的集成环境&#xff0c;我一般Anaconda 和 winpython 都用&#xff0c;windows下主要用Winpython&#xff0c;IDE为spyder&#xff08;类MATLAB界面&#xff09;。 winpython脱胎于pythonxy&#xff0c;面向科学计算&#xff0c;兼顾数据分析与挖掘&#xff1b;Anaco…

如何恢复数据?数据恢复,5个实用方法!

案例&#xff1a;如何恢复数据 【我是个比较粗心的人&#xff0c;总是会莫名奇妙的就丢失各种电脑的数据&#xff0c;想问下大家在使用电脑时&#xff0c;如果有数据的丢失&#xff0c;是如何恢复数据的呢&#xff1f;】 在使用Windows电脑时&#xff0c;数据丢失或删除是非常…

支付系统设计二:统一开发框架

文章目录 前言一、项目分层二、模块职责简介1. API层2. Service层2.1 操作执行服务2.2 操作器2.3 操作执行器2.4 参数校验2.5 操作器实现 3. Domain层4. Infrastructure层4.1 Dal层 三、对应类图四、开发内容3.1 约定请求报文格式3.2 新增交易码与操作器映射枚举类3.3 配置参数…

2 # 函数柯里化

什么是函数柯里化 函数柯里化&#xff08;Currying&#xff09;是一种将接受多个参数的函数转换为一系列接受单一参数的函数的技术。 通过函数柯里化&#xff0c;我们可以将原来接受多个参数的函数&#xff0c;转换为一系列只接受单一参数的函数&#xff0c;每个函数接收一个…

前端面试题总结(初级前端:HTML + CSS + JavaScript + Ajax + Vue2全家桶)

theme: channing-cyan 求关注&#x1f62d; 壹、HTML CSS 1. 对HTML语义化的理解 去掉或者丢失样式的时候能够让页面呈现出清晰的结构&#xff1b;代码结构清晰&#xff0c;方便团队的管理和维护&#xff0c;并且语义化更具可读性&#xff1b;提升用户体验&#xff0c;在…

什么是daemon与服务(service)

什么是daemon与服务(service) 在Linux系统中&#xff0c;daemon是指一类在后台运行的服务进程&#xff0c;通常以d结尾。它们不与用户进行交互&#xff0c;也不接受用户的输入&#xff0c;而是在系统启动时自动启动并一直运行&#xff0c;为操作系统、应用程序和其他服务提供支…

Julia入门-3、Julia包管理工具

文章目录 0、Julia 的包管理工具是Pkg1、使用Julia包管理工具过慢 0、Julia 的包管理工具是Pkg Julia 的包管理工具是Pkg&#xff0c;可以用于安装、更新、卸载和管理 Julia 中的软件包。以下是一些常用的 Pkg命令&#xff1a; Pkg.add("Package")&#xff1a;安装一…

Node.js 与 WebAssembly

目录 1、简介 2、关键概念 3、生成WebAssembly模块 4、如何使用它 5、与操作系统交互 1、简介 首先&#xff0c;让我们了解为什么WebAssembly是一个很棒的工具&#xff0c;并学会自己使用它。 WebAssembly是一种类似汇编的高性能语言&#xff0c;可以从各种语言编译&…

深度学习 - 47.DIN 深度兴趣网络保姆级实现 By Keras

目录 一.引言 二.DIN 模型分析 1.Input 输入 2.Embedding & Concat 嵌入与合并 3.DIN 深度兴趣网络 4.MLP 全连接 三.DIN 模型实现 1.Input 2.DIN Layer 2.1 init 初始化 2.2 build 构建 2.3 call 调用 3.Dice Layer 3.1 init 初始化 3.2 build 构建 3.3 …

网络安全:渗透神器 kali 的安装.

网络安全&#xff1a;渗透神器 kali 的安装. Kali Linux是一款基于Debian的Linux发行版&#xff0c;专门用于渗透测试和网络安全评估。它包含了大量的渗透测试工具和网络安全工具&#xff0c;适用于各种不同的渗透测试场景和需求。 目录&#xff1a; 网络安全&#xff1a;渗透…

MS5814可选内置基准、四通道数模转换器

MS5814/5814T 是一款 12bit 四通道输出的电压型 DAC&#xff0c;集成可选内部基准&#xff0c;接口采用四线串口模式&#xff0c;可以兼容 TMS320、SPI、QSPI 和 Microwire 串口。MS5814/5814T 控制数据有 16bit&#xff0c;包括 DAC 地址&#xff0c;控制字节和 12bitDAC 数据…

MySQL——BasicKnowledge

1. Mysql Version ​​​​​​​​​​​​ 2.install & uninstall 2.1 Linux My Content 3.Configure 3.1 设置IP访问 参考链接 3.1.1 方法一&#xff1a;改表法 --登入mysql后&#xff0c;更改"mysql"数据库中"user"表里的 "host&quo…

“三问五步”落地医疗行业数据安全建设体系|盾见

个 文|龚磊 2021年6月10日&#xff0c;我国《数据安全法》颁布&#xff0c;并于2021年9月1日正式施行&#xff0c;作为数据领域的纲领性和基础性法律&#xff0c;以准确定义数据、数据处理、数据安全为出发点&#xff0c;提出解决数据全生命周期中的数据安全问题&#xff0c;达…

深入浅出,理解知识图谱技术及其应用

知识图谱是一个将各种实体之间的关系以图谱的形式呈现出来的技术。这些实体可以是人、地点、组织或任何其他类型的实体。知识图谱将这些实体与它们之间的关系链接在一起&#xff0c;从而形成一个表示知识的图形结构。本文将介绍知识图谱的基础知识&#xff0c;包括它的定义、应…

【TA100】渲染管线

粗粒度剔除&#xff1a;根据物体之间的遮挡关系&#xff0c;剔除遮挡的物体。 多顶点分配到GPU不同单元执行&#xff0c;提升速度 1 应用阶段 1.1 场景阶段 ### 1.2 粗粒度剔除 剔除与摄像机与视锥体不相交的光源或者光线照射方向与与视角不重合的光源。 1.3 渲染设置 1.4 调用…

AVL树的插入

介绍: 在二叉搜索树的前提下,左右高度差(平衡因子)的绝对值不大于1 二叉搜索数->中序排序树->极端情况下时间复杂度高 ->我博客更过不了解去翻翻 (搜索二叉树——寻找节点&#xff0c;插入节点&#xff0c;删除节点_别想闲鱼了&#xff01;快去学习的博客-CSDN博客)…

硬核推荐!3款私藏的卡通头像在线生成网站,减少撞“头”率

现在各个软件应用都会有自己的头像设置&#xff0c;肯定有很多朋友经常喜欢换头像&#xff0c;我猜大家的头像要么就是明星&#xff0c;要么就是网图&#xff0c;总是出现和别人撞“头”的现象。今天就来给大家推荐几个在线制作头像的网站&#xff0c;保证让撞“头”率减少90%。…

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

目录 1.聚合函数 1.1.group by子句 1.2.having语句 2.单表查询 2.2单表查询 3.多表查询 3.2.子查询 5.内链接 6.外连接 1.聚合函数 函数说明count返回查询到的数据的数量sum返回查询到的数据的总和avg返回查询到的数据的平均值max返回查询到的数据的最大值min返回查询…

WPF MVVM基础教程(五)RelativeSource属性绑定

RelativeSource属性绑定 介绍RelativeSource属性介绍RelativeSource的Mode属性有四种模式&#xff1a; 四种模式用法Self模式FindAncestor模式使用规则&#xff1a; TemplatedParent模式PreviousData模式 特殊用法绑定到其他ViewModel上的命令 介绍 RelativeSource 是一个标记…

前端HTML学习(二)

1、列表标签 列表标签概述&#xff1a;能够使用无序列表、有序列表、自定义列表标签&#xff0c;实现网页中列表结构的搭建。列表应用在网页中按照行展示关联性的内容&#xff0c;如:新闻列表、排行榜、账单等。 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&a…