LeetCode刷题笔记【28】:贪心算法专题-6(单调递增的数字、监控二叉树)

news2025/4/17 18:17:53

文章目录

  • 前置知识
  • 738.单调递增的数字
    • 题目描述
    • 解题思路
    • 代码
  • 968.监控二叉树
    • 题目描述
    • 解题思路
    • 代码
  • 总结

前置知识

参考前文

参考文章:
LeetCode刷题笔记【23】:贪心算法专题-1(分发饼干、摆动序列、最大子序和)
LeetCode刷题笔记【24】:贪心算法专题-2(买卖股票的最佳时机II、跳跃游戏、跳跃游戏II)
LeetCode刷题笔记【25】:贪心算法专题-3(K次取反后最大化的数组和、加油站、分发糖果)
LeetCode刷题笔记【26】:贪心算法专题-4(柠檬水找零、根据身高重建队列、用最少数量的箭引爆气球)
LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)

738.单调递增的数字

题目描述

在这里插入图片描述

LeetCode链接:https://leetcode.cn/problems/monotone-increasing-digits/description/

解题思路

思路:如果一个数本身是符合“单调递增”的话,那么直接返回其本身
如果其不满足,那么找到其不满足的那一位,将其--,后面的位数都=9
注意找到这一位后,如果这一位和其左侧的数一样,那么还需要找到这一串一样的数的最左边一个,再对其进行上述操作。

这种思路感觉很取巧,但其实是有效的。
哪一位产生的“非递增”的问题,那么就需要对这一位进行--操作,而其后面的那些位,因为题目要求“最大数字”,所以需要都是9.

代码

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string N = to_string(n);
        // cout << "N= " << N << endl;
        for(int i=0; i<N.size()-1; ++i){
            // cout << "i= " << i << endl;
            if(N[i] > N[i+1]){
                int p=i;
                while(p>0 && N[p]==N[p-1])
                    p--;
                N[p]--;
                for(int j=p+1; j<N.size(); ++j){
                    // cout << "j= " << j << endl;
                    N[j] = 9 + '0';
                    // cout << "N[j]= " << N[j] << endl;
                }
                break;
            }
        }
        cout << "N= " << N << endl;
        return stoi(N);
    }
};

968.监控二叉树

题目描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

LeetCode链接:https://leetcode.cn/problems/binary-tree-cameras/description/

解题思路

参考<代>, 使用贪心
这里的贪心贪的是叶子节点, 就是我们一定要让叶子节点是没有摄像头, 而叶子节点的父节点是有摄像头的, 才最优

所以这里需要自底向上推导

三种状态: ①没有覆盖 ②有摄像头(也被覆盖) ③没有摄像头, 但是被覆盖

递归过程是先递归左右节点, 然后根据左右节点的结果, 生成本节点的结果, 然后返回本节点的状态
对于根节点, 要注意, 如果最后发现根节点的状态是"没有覆盖", result要再+1

左右任意为1, 本节点为2;
左右任意为2, 本节点为3;
左右都为3, 本节点为1;

为了让达到刚才说的"让叶子节点是没有摄像头, 而叶子节点的父节点是有摄像头", 需要让null节点为3

代码

class Solution {
private:
    int ans=0;
    int helper(TreeNode* root){
        if(root==nullptr)
            return 3;
        int left = helper(root->left);
        int right = helper(root->right);
        if(left==1 || right==1){
            ans++;
            return 2;
        }else if(left==2 || right==2){
            return 3;
        }else{
            return 1;
        }
        return 0;
    }
public:
    int minCameraCover(TreeNode* root) {
        int rootMode = helper(root);
        if(rootMode==1)
            ans++;
        return ans;
    }
};

总结

贪心相关题目做到今天也告一段落了, 总结起来, 我依然并不是很赞同"贪心"这一题目分类.

因为归根结底我都感觉"贪心"并不能算是一种"解题方法", 充其量是一种难以捉摸的"解题思想", 甚至被分在这一题目合集下的, 大多是各种奇技淫巧的操作.

这些题目, 对于应试而言, 只能多看几遍, 保持印象;
而对于代码能力的提升而言, 只能说聊胜于无, 略好于纯粹的脑筋急转弯吧.

本文参考:
单调递增的数字
监控二叉树

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

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

相关文章

VMware虚拟机+Centos7 配置静态,动态IP

本章目录 一、查看网关&#xff1a; 编辑–>虚拟网络编辑器二、点击NAT设置三、记住网关IP待会要用四、配置静态ip地址1、进入存放修改IP地址的目录2、修改ip地址的文件3、编辑文件4、文件&#xff08;编辑好后退出&#xff09; 五、重启网络六、测试1、linux上查看IP地址的…

使用pyenv安装python缓慢或无法安装

使用pyenv安装python缓慢或无法安装 这一定程度上和网络情况有关&#xff0c;下面提供几个常见方法&#xff1a; 关闭 VPN 后重新安装使用管理员权限打开命令窗口后安装如下 手动安装 pyenv 在执行 pyenv install --- 命令的时候&#xff0c;会连接远程库&#xff0c;将要安…

格式工厂多个图片合并成一个PDF的报错

使用图片合并PDF功能时 当图片数量超过50会报错 找到imgconv.py文件&#xff0c;将50改为500&#xff0c;保存 现在可以支持100张图合并成一个PDF文件了&#xff01; 但是超过150张程序会直接闪退&#xff0c;正在解决中。。

基于任务队列的机器学习服务实现

将机器模型部署到生产环境的方法有很多。 常见的方法之一是将其实现为 Web 服务。 最流行的类型是 REST API。 它的作用是全天候&#xff08;24/7&#xff09;部署和运行&#xff0c;等待接收来自客户端的 JSON 请求&#xff0c;提取输入&#xff0c;并将其发送到 ML 模型以预测…

3D异常检测论文笔记 | Shape-Guided Dual-Memory Learning for 3D Anomaly Detection

文章目录 摘要一、介绍三、方法3.1. 形状引导专家学习3.2. Shape-Guided推理 摘要 我们提出了一个形状引导的专家学习框架来解决无监督的三维异常检测问题。我们的方法是建立在两个专门的专家模型的有效性和他们的协同从颜色和形状模态定位异常区域。第一个专家利用几何信息通…

涛然自得周刊(第 5 期):蝲蛄吟唱的地方

作者&#xff1a;何一涛 日期&#xff1a;2023 年 8 月 20 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;不定期发。历史周刊内容可以看这里。 电影 《沼泽深处的女孩》 改编自小说《蝲蛄吟唱的地方》&#xff0c;主角是一位在沼泽地独自生活并长大的女孩&…

[VSCode] 替换掉/去掉空行

VSCode中使用快捷键CtrlH&#xff0c;出现替换功能&#xff0c;在上面的“查找”框中输入正则表达式&#xff1a; ^\s*(?\r?$)\n然后选择右侧的“使用正则表达式”&#xff1b;“替换”框内为空&#xff0c;点击右侧的“全部替换”&#xff0c;即可去除所有空行。 参考 [VS…

Apipost forEach控制器怎么用

最近&#xff0c;Apipost对自动化测试进行了优化&#xff0c;新增foreach控制器。这个新功能的引入为自动化测试带来了更高的效率和灵活性。本文将介绍Apipost的foreach控制器&#xff0c;解释其用途和优势&#xff0c;帮助您更好地利用这一功能提升自己的测试工作。 什么是fo…

Andorid项目源码(167套)

一、项目介绍 (精华)新浪微博图片缓冲技术_hyg.rar ActivityGroup GridView ViewFlipper 实现选项卡.zip Adroid UI 界面绘制原理分析.rar AnderWeb-android_packages_apps_Launcher-4458ee4.zip andorid 源码北京公交线路查询&#xff08;离线&#xff09;.zip android Gal…

【Java 基础篇】Java Date 类详解:日期和时间操作的利器

在 Java 编程中&#xff0c;处理日期和时间是一项常见但复杂的任务。Java 提供了许多用于日期和时间操作的类&#xff0c;其中 java.util.Date 类是最早的日期和时间类之一。然而&#xff0c;它存在一些问题&#xff0c;因此 Java 8 引入了 java.time 包&#xff0c;其中包含了…

宇凡微发布2.4G合封芯片YE08,融合高性能MCU与射频收发功能

宇凡微在2023年推出了全新的2.4G合封芯片YE08&#xff0c;该芯片结合了32位高性能MCU和强大的2.4GHz无线通信功能&#xff0c;为各种远程遥控应用提供卓越性能和广泛应用潜力。 深入了解YE08内部构造 YE08芯片内部融合了两颗强大的芯片&#xff1a;PY32F002B MCU和G350 2.4G通…

基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测

基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测 前言一、代码运行1. 解压数据2. 导包3. 读取数据4. 构建网络5. 设置优化器6. 模型训练7. 可视化loss8. 模型验证 二、结果展示三、总结作者简介 前言 二氧化硫&#xff08;SO2&#xff09;是一种常见的环境污染物&#xff…

CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(2)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

pytorch代码实现之空间通道重组卷积SCConv

空间通道重组卷积SCConv 空间通道重组卷积SCConv&#xff0c;全称Spatial and Channel Reconstruction Convolution&#xff0c;CPR2023年提出&#xff0c;可以即插即用&#xff0c;能够在减少参数的同时提升性能的模块。其核心思想是希望能够实现减少特征冗余从而提高算法的效…

C++信息学奥赛1190:上台阶

#include <iostream> using namespace std;long long arr[80]; // 用于存储斐波那契数列的数组int main() {int n;arr[1]1; // 初始化斐波那契数列的前三个元素arr[2]2;arr[3]4;for(int i4;i<71;i) { // 计算斐波那契数列的第4到第71个元素arr[i]arr[i-1]arr[i-2]…

为XDR扩展威胁检测响应提供响应解决方案

安全层面最本质的问题是检测与响应&#xff0c;而当前的检测与响应&#xff0c;还存在着一些痛点和难点亟需解决&#xff0c;响应运营层面仍存在着一些挑战。 各类安全防护设备每天会产生大量的安全告警&#xff0c;使得安全分析人员绝大部分时间和精力都“消耗”在告警信息中…

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

01 下载资源 本实验使用资源: 开源模拟器qemu 下载地址, qemu-w64-setup-20230822.exe loongarch 固件下载: QEMU_EFI_8.0.fd loongarch 基本镜像下载: archlinux-loong64.iso qemu安装在D:\install\qemu: D:\install\qemu>dir | findstr "qemu-system-loongarch"…

Qt 5.15集成Crypto++ 8.7.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW&#xff08;8.10版本&#xff09;编译并集成Crypto 8.7.0。 但是该编译出来的库&#xff08;.a和.dll&#xff09;不适用MSVC&#xff08;2019版本&#xff09;构建环境&#xff0c;需要重新编译&#xff08;.lib或和.dll&#xf…

LRTimelapse 6 for Mac(延时摄影视频制作软件)

LRTimelapse 是一款适用于macOS 系统的延时摄影视频制作软件&#xff0c;可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能&#xff0c;支持多种时间轴摄影工具和文件格式&#xff0c;并具有高度的可定制性和扩展性。 LRTimelapse 的主要特点如下&am…

Qt下SVG格式图片应用

SVG格式图片介绍 svg格式图片又称矢量图&#xff0c;该种格式的图片不同于png等格式的图片&#xff0c;采用的并不是位图的形式来组织图片&#xff0c;而是采用线条等组织图片&#xff0c;svg格式是图片的文件格式是xml&#xff0c;可以通过文件编译器打开查看svg格式内容。 …