代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树

由于本笔记编辑时保存前误触,导致内容消失,所以为节省时间采取简单写法重写。

56. 合并区间

思路:

  1. 结果为空 或当前区间和结果最后一个区间不重叠,则把当前区间加入结果

  2. 若当前区间和结果最后一个区间重叠,则更新最后一个区间的右边界为最大值;

cpp 复制代码
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end());

        vector<vector<int>> res;
        for (const auto& interval : intervals) {
            if (res.empty() || res.back()[1] < interval[0]) {
                res.push_back(interval);
            } else {
                res.back()[1] = max(res.back()[1], interval[1]);
            }
        }
        return res;
    }
};

738. 单调递增的数字

思路:

从后往前找到处在最前面位置的不递增的数字

把该数字后面的数全置为9

cpp 复制代码
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string str = to_string(n);
        int flag=str.size();
        for(int i=str.size()-1;i>0;i--){
            if(str[i-1]>str[i]){
                flag = i;
                str[i-1]--;
            }
        } 
        for(int i=flag;i<str.size();i++){
            str[i]='9';
        }
        return stoi(str);
    }
};

968. 监控二叉树

思路:

想到应该根据左右孩子的状态决定父节点的处理逻辑,所以用后序遍历(左右中)

三种节点状态:不被监控-0、装摄像头-1、被监控-2

三种处理逻辑:

1.左右孩子均为2,父节点为0(只需要在父节点的父节点装摄像头,否则就重复监控了)

2.左右孩子有一个为0,父节点为1(否则为0的子节点会被忽略)

3.左右孩子有一个为1,父节点为2

注:如果最后整棵树的父节点状态如果为0,将其置为1,否则会出现父节点本身没被监控的情况

cpp 复制代码
class Solution {
public:
    int result=0;
    int travseral(TreeNode* cur){
        if (cur==NULL) return 2;
        int left = travseral(cur->left);
        int right = travseral(cur->right);

        if(left==2 && right==2) return 0;
        if(left==0 || right==0){
            result++;
            return 1;          
        }
        if(left==1 || right==1) return 2;
        return -1;
    }
    int minCameraCover(TreeNode* root) {
        result=0;
        if(travseral(root) == 0) result++;
        return result;
    }
};

相关推荐
草莓熊Lotso14 分钟前
【Linux网络】深入理解Linux IO多路复用:从本质到select服务器实战
linux·运维·服务器·c语言·网络·数据库·c++
小七在进步34 分钟前
数据结构:堆排序
数据结构
selfsongs11 小时前
指针、内存管理、现代 C++ 特性
c++
可编程芯片开发12 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考12 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
吃着火锅x唱着歌13 小时前
Effective C++ 学习笔记 条款37 绝不重新定义继承而来的缺省参数值
c++·笔记·学习
2401_8414956413 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理
小保CPP13 小时前
OCR C++ Tesseract按行识别字符
c++·人工智能·ocr·模式识别·光学字符识别
阿米亚波14 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记
Mr.HeBoYan14 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk