代码随想录算法训练营第三十七天| 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(); // 用来标记从哪一位开始后面的数字改成9
        for (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,没被监控覆盖0
    int 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; // 情况1
        if (left == 0 || right == 0) {
            result++;
            return 1; // 情况2
        }
        if (left == 1 || right == 1)
            return 2; // 情况3
        return -1;
    }
    int minCameraCover(TreeNode* root) {
        if (root == NULL)
            return result;
        if (traversal(root) == 0)
            result++; // 情况4
        return result;
    }
};

总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux信号(处理)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言&#xff1a; Linux信号(产生)-CSDN博客 Linux信号(保存)-CSDN博客 前面我们解释了信号的产生和保存&#xff0c;接下来我们就要解释信号的处理&#xff0c;关于操作系统在合适的时候对信号进行处理&#xff0c;合适…

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 &#x1f4dd;前言&#x1f320; 头文件Date.h&#x1f309;日期计算函数&#x1f320;前后置&#x1f309;前后置-- &#x1f320;两对象日期相减&#x1f309;自定义流输入和输出 &#x1f309; 代码&#x1f309; 头文件Date.h&#x1f320;Date.cpp&#x1f309; …

(windows ssh) windows开启ssh服务,并通过ssh登录该win主机

☆ 问题描述 想要通过ssh访问win主句 ★ 解决方案 安装ssh服务 打开服务 如果这里开不来就“打开服务”&#xff0c;找到下面两个开启服务 然后可以尝试ssh链接&#xff0c;注意&#xff0c;账号密码&#xff0c;账号是这个&#xff1a; 密码是这个 同理&#xff0c;如果…

matlab新手快速上手5(蚁群算法)

本文根据一个较为简单的蚁群算法框架详细分析蚁群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 蚁群算法简介&#xff1a; 蚁群算法是一种启发式优化算法&#xff0c;灵感来源于观察蚂蚁寻找食物的行为。在这个算法中&#xff0c;解决方案被看作是…

vue3中的ref、isRef、shallowRef、triggerRef和customRef

1.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。 ref 对象拥有一个指向内部值的单一属性 .value property &#xff0c;指向内部值。 例&#xff1a;此时&#xff0c;页面上的 str1 也跟着变化 <template><div><button click"handleClick&quo…

BUUCTF-MISC-10.LSB1

10.LSB1 题目&#xff1a;lsb隐写&#xff0c;stegsolve可以看到包含了一个PNG图片 使用stegsolve打开这个图片 由PNG文件头可以看出隐写内容为PNG文件&#xff0c;按save Bin键保存为PNG文件。 得到一张二维码图片&#xff0c;使用CQR扫一下

盲返模式:电商领域的新玩法与商业创新

大家好&#xff0c;我是微三云周丽&#xff0c;今天给大家分析当下市场比较火爆的商业模式&#xff01; 小编今天跟大伙们分享什么是什么是盲返模式&#xff1f; 随着互联网的深入发展&#xff0c;电商行业正面临着前所未有的机遇与挑战。在这个竞争激烈的市场环境中&#xff…

GAN 生成对抗神经网络

GAN 文章目录 GANGAN的结构GAN的目标函数GAN的训练GAN的优势和不足优势不足 GAN的结构 GAN的设计灵感来源于博弈论中的零和博弈&#xff08;Zero-sum Game&#xff09;&#xff0c;在零和博弈中&#xff0c;参与双方的收益是完全相反的&#xff0c;一方的收益必然导致另一 方的…

Python400集 视频教程,手把手带你零基础手写神经网络!!

嗨喽&#xff0c;大家好&#xff0c;今天又要给大家整一波福利了&#xff01; 学习编程&#xff0c;最忌讳就是今天一个教程&#xff0c;明天一个教程&#xff0c;频繁更换教程&#xff0c;增加自己的学习成本&#xff0c;对于新手小白会是一件严重打击自信心的事情。所以今天…

jetson开发板+外接散热风扇

本文参考链接 https://news.mydrivers.com/1/580/580811.htm?refhttps%3A//www.baidu.com/link%3Furl%3DM_D45a-od3NK-ER_Flgqqw4LjHLinB1xrmYNj7VVqHlM2zVXwR9Z7FGilCYDRRJYNpIsdejeAfpVtmVTowuFfK%26wd%3D%26eqid%3D81e7865e000256a5000000046628ff4a 一、三种风扇的种类 二…

全自动装箱机多少钱?它的性能和优势又是怎样的呢?

在现代化的生产线中&#xff0c;全自动装箱机已经成为许多企业提升效率、降低成本的重要设备。那么&#xff0c;全自动装箱机到底多少钱?它的性能和优势又是怎样的呢? 一、全自动装箱机&#xff1a;高效省力的生产助手 全自动装箱机是一种高度自动化的包装设备&#xff0c;能…

掌握未来通信技术:5G核心网基础入门

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;5GC笔记仓 朋友们大家好&#xff0c;本篇文章是我们新内容的开始&#xff0c;我们本篇进入5GC的学习&#xff0c;希望大家多多支持&#xff01; 目录 一.核心网的演进2G核心网2.5G核心网3G核心网4G…

CFCASSL证书的网络安全解决方案

在数字化时代&#xff0c;网络信息安全的重要性不言而喻。随着电子商务、在线交易、远程办公等互联网活动的日益普及&#xff0c;确保数据传输的安全性与隐私保护成为企业和用户共同关注的焦点。在此背景下&#xff0c;CFCA SSL证书作为一种权威、高效的网络安全解决方案&#…

ShardingSphere 5.x 系列【24】集成 Nacos 配置中心

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 前言2. ShardingSphereDriverURLProvider3. 方式一:基于 Nacos Java SDK…

《2024年网络弹性风险指数报告》:92%的组织并未准备好应对AI安全挑战

网络弹性是一个比传统网络安全更大、更重要的范例&#xff0c;拥有有效网络弹性能力的组织能在承受网络攻击、技术故障或故意篡改企图后迅速恢复正常业务运营。近日&#xff0c;Absolute security公司发布的《2024年网络弹性风险指数报告》旨在评估当今全球企业的网络弹性状况&…

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑

目录 &#x1f378;前言 &#x1f37b;一、软件安装&#xff08;Windows版&#xff09; 1.1、Elasticsearch 下载 2.1 安装浏览器插件 3.1、安装可视化工具 Kibana 4.1、集成 IK 分词器 &#x1f37a;二、安装问题 &#x1f379;三、测试 IK 分词器 ​&#x1f377; 四、章…

用斐波那契数列感受算法的神奇(21亿耗时0.02毫秒)

目录 一、回顾斐波那契数列 二、简单递归方法 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;代码展示 &#xff08;三&#xff09;性能分析 三、采用递归HashMap缓存 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;代码展示 &…

PPSSPPSDL for Mac v1.17.1 PSP游戏模拟器(附500款游戏) 激活版

PPSSPPSDL for Mac是一款模拟器软件&#xff0c;它允许用户在Mac上运行PSP&#xff08;PlayStation Portable&#xff09;游戏。通过这款模拟器&#xff0c;用户可以体验到高清甚至更高的分辨率的游戏画面&#xff0c;同时还能够升级纹理以提升清晰度&#xff0c;并启用后处理着…

新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人

江苏晋控装备新恒盛化工有限公司是晋能控股装备制造集团有限公司绝对控股的化工企业&#xff0c;公司位于江苏省新沂市。新恒盛公司40•60搬迁项目在江苏省新沂市经济开发区化工产业集聚区苏化片区建设&#xff0c;总投资为56.64亿元&#xff0c;该项目是晋能控股装备制造集团重…

PEG SPARCL™试剂盒

Life Diagnostics开发了SPARCL™ 试剂盒用于检测甲氧基-PEG&#xff08;mPEG&#xff09;和非甲氧基PEG。可检测游离的PEG和PEG化的蛋白质。灵敏度随PEG链长度和PEG化程度的不同而变化。 SPARCL™检测具有以下特点&#xff1a; ● 发光免疫测定法 ● 只需一次30分钟的孵育 …