算法 贪心5 || 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

news2024/12/24 9:10:45

435. 无重叠区间

和452. 用最少数量的箭引爆气球 思路是很相似的。本题按照左边排序或者按照右边排序都是可以的,最终目的都是为了让区间尽可能重叠。
1、按右边排序,排序完第一个元素的右边界一定是最小右边界。往下找第一个不与其重合的左边界,找的话count+1。在找到4之前,1 2 3中最小右边界(最不容易与后面左边界重合的值,一定是1的右边界)
在这里插入图片描述

class Solution {
public:
    static bool cmp(const vector<int>& v1,const vector<int>& v2){
        return v1[1] < v2[1];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end(),cmp);
        int count = 1;
        int end = intervals[0][1];
        for(int i = 1; i < intervals.size(); ++i){
            if(intervals[i][0] >= end){
                count++;
                end = intervals[i][1];
            }
        }
        return intervals.size() - count;
    }
};

2、按左边界排序。
根据右边界排序,一下子就能找到下一个不重合的区域是4。但是按照左边界的排序,找的是重合区域。
在这里插入图片描述

class Solution {
public:
    static bool cmp(const vector<int>& v1,const vector<int>& v2){
        return v1[0] < v2[0];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end(),cmp);
        int count = 0;
        int end = intervals[0][1];
        for(int i = 1; i < intervals.size(); ++i){
            if(intervals[i][0] < end){
                count++;
                end = min(end,intervals[i][1]);
            }
            else{
                end = intervals[i][1];
            }
        }
        return count;
    }
};

763.划分字母区间

之前做过,直接能想到方法。但是!要注意更新maxindex要在收获结果之前!因为要设置maxindex的初始值。如果是INT_MIN,但是cdaa这种情况,先收获结果的话,就会漏掉index = 0,c单独分割的情况。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> res;
        unordered_map<char, int> map;
        int maxIndex = INT_MIN;
        for (int i = 0; i < s.size(); ++i) {
            map[s[i]] = i;
        }
        for(int i = 0; i < s.size(); ++i){
            if(map[s[i]] > maxIndex) maxIndex = map[s[i]];
            if(i == maxIndex){
                int sum = 0;
                for(int a : res) sum += a;
                int temp = i + 1 - sum;
                res.push_back(temp);
                
            }
        }
        return res;
    }
};

56. 合并区间

和452. 用最少数量的箭引爆气球 (opens new window) 和 435. 无重叠区间 (opens new window) 都是一个套路。
卡哥直接在res数组里融合区间,更简洁一些

result.back()[1] = max(result.back()[1], intervals[i][1]); 

自己的方式是通过left和right来记录重叠区间

class Solution {
public:
    static bool cmp(const vector<int>& v1, const vector<int>& v2){
        return v1[0] < v2[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> res;
        sort(intervals.begin(),intervals.end(),cmp);
        int left = intervals[0][0];
        int right = intervals[0][1];
        for(int i = 1; i < intervals.size(); ++i){
            if(intervals[i][0] <= right){
                right = max(right,intervals[i][1]);
            }
            else{
                vector<int> vec;
                vec.push_back(left);
                vec.push_back(right);
                res.push_back(vec);
                left = intervals[i][0];
                right = intervals[i][1];
            }
        }
        vector<int> vec;
        vec.push_back(left);
        vec.push_back(right);
        res.push_back(vec);
        return res;
    }
};

738.单调递增的数字

本质是从后向前遍历,到第一个满足升序的位置,减一,然后后面的数置为9。比如322变成299。但是在处理方式上,如果遇到100,用数组处理就很非常麻烦,会遇到位数缩减的问题。**string有一个函数stoi,可以将string转换成int。**会自动去除无效位数。所以可以将数字先通过to_string转成字符串处理。处理完以后再转为int

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

968.监控二叉树

想到了后序遍历,也想到子节点的父节点给摄像头。但是考虑并不周全。本题可以使用状态转移。
一个节点可能处于三种情况下:
1、没覆盖:0
2、有相机:1
3、有覆盖: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:
    int count = 0;
    int minCameraCover(TreeNode* root) {
        if(find(root) == 0){
            count++;
        }
        return count;
    }
    int find(TreeNode* cur){
        if(cur == nullptr) return 2;
        int left = find(cur->left);
        int right = find(cur->right);
        if(left == 2 && right == 2) return 0;
        if(left == 0 || right == 0) {
            count++;
            return 1;
        }
        if(left == 1 || right == 1) return 2;
        return -1;
    }
};

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

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

相关文章

亚马逊云科技为全球的可持续发展进程做出贡献

可持续发展是一个涉及经济、环境和社会三个方面的复杂问题。经济发展必须在保护环境和社会公正的前提下进行&#xff0c;这样才能实现真正的可持续发展。为了实现这一目标&#xff0c;人们需要借助技术手段&#xff0c;更好地理解和解决环境和社会问题。 亚马逊云科技是全球领…

nssctf web入门(2)

目录 [SWPUCTF 2021 新生赛]easy_md5 [SWPUCTF 2021 新生赛]include [SWPUCTF 2021 新生赛]PseudoProtocols 这里通过nssctf的题单web安全入门来写&#xff0c;会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列&#xff0c;之后会一直出这个题单的解…

到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

文章目录到了那个年纪&#xff0c;就应该阅读Spring源码了&#x1f604;第一步&#xff0c;clone&#x1f606;第二步&#xff0c;使用idea打开项目&#x1f60a;gradle介绍&#xff08;插叙手法&#xff09;&#x1f603;第三步&#xff0c;修改gradle的远程仓库地址&#x1f…

Day932.5个步骤,高效推动组件化架构重构 -系统重构实战

5个步骤&#xff0c;高效推动组件化架构重构 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录都是关于5个步骤&#xff0c;高效推动组件化架构重构的内容。 项目的架构设计是一回事&#xff0c;代码落地又是另外一回事&#xff0c;很多架构设计最终都只是落在了 PPT 上。 一…

QT Graphics View坐标系转换

背景 在做绘图处理时&#xff0c;Scence作为场景&#xff0c;大小是无限的&#xff0c;而View作为一个观察镜头&#xff0c;观察范围是有限的。 那么有限的View观察无限的Scence区域&#xff0c;必然要选定一个观测锚点。 所以View具有一个centerOn(QPointF pos)函数&#xff…

Linux-初学者系列——篇幅1_文件管理命令(持续更新中)

Linux-初学者系列_篇幅1 文件管理命令-目录Linux-初学者系列_篇幅11.创建文件语法&#xff1a;示例&#xff1a;2.创建目录语法&#xff1a;示例&#xff1a;注意&#xff1a;常见错误&#xff1a;3.复制语法&#xff1a;示例&#xff1a;补充&#xff1a;4.移动语法&#xff1…

Vue|数据渲染

Vue 是如何将编译器中的代码转换为页面真实元素的&#xff1f;在Vue 中,自带了模板渲染,而模板的语法也非常简洁易懂。 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一. 数据渲染1.1 条件渲染v-ifv-show1.2 列表渲染v-for1.3 小结一. 数据渲染 1.1 条件渲染 vue条件渲染指…

3. 500 服务器异常 html

目录 1.效果图 2.code 1.效果图 2.code <!DOCTYPE html> <html><head><meta charset="utf-8"><title>500</title><style type="text/css">html,body {margin: 0;padding: 0;height: 100%;min-height: 450px;…

Git --- 常用命令、分支操作、团队协作机制

一、Git 概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性 其性能优于 Subversion、…

多通道振弦传感器无线采集仪与参数配置工具连接

多通道振弦传感器无线采集仪与参数配置工具连接 VS101~VS432 设备配备了专门的参数配置工具 SETP 来完成设备工作参数的查看和修改工作。 连接前的准备工作 &#xff08; 1&#xff09;数据接口与计算机连接 使用标配的通讯线与计算机 RS232 接口连接。 若需基于手机网络发送数…

Java-异常机制

异常机制 正常情况下&#xff0c;程序按照我们希望的样子和步骤去执行&#xff0c;但是&#xff0c;代码就像人生&#xff0c;要是一帆风顺了&#xff0c;就要想想是不是哪里出事了。程序若是有报错还好&#xff0c;就怕没有报错。 实例 public class Test {public static vo…

如何用 YonBuilder 构建线索管理应用

加速企业数智营销&#xff1a;如何用 YonBuilder 构建线索管理应用 如何用 YonBuilder 低代码开发线索管理应用&#xff1f; 线索管理是指通过各种渠道收集、筛选、打分、分配、跟进和培育潜在客户的信息&#xff0c;以便将其转化为成交客户的过程。 通过数智化手段实现良好…

ArcGIS地质图矢量化技巧

01 概述 今天以ArcGIS为例&#xff0c;结合多年的工作经验&#xff0c;来介绍一下地质图矢量化的技巧。 02 底图的配准 不同比例尺的图件&#xff0c;有着不同的配准精度要求&#xff1a; 1&#xff1a;20万的地质图&#xff0c;配准误差不能高于20米&#xff1b; 1:50万…

DFIG控制9: 搭建定子αβ坐标系下的电机模型

DFIG控制9&#xff1a; 搭建定子αβ坐标系下的电机模型。本文基于教程的第9部分&#xff08;终于做完了&#xff09;。主要目的是自己搭建一个DFIG的电机模型&#xff0c;与Simulink库中的模型做个对比。 本文基于教程的第9部分&#xff1a; DFIM Tutorial 9 - Analytical Mod…

Focal Loss论文解读和调参教程

论文&#xff1a;Focal Loss for Dense Object Detection 论文papar地址&#xff1a;ICCV 2017 Open Access Repository 在各个主流深度学习框架里基本都有实现&#xff0c;本文会以mmcv里的focal loss实现为例&#xff08;基于pytorch&#xff09; 简介&#xff1a; 本文是…

1.mybatis-plus入门及使用

1.什么是MybatisPlus MyBatis-Plus 官网 为什么要学MybatisPlus&#xff1f; MybatisPlus可以节省大量时间&#xff0c;所有的CRUD代码都可以自动化完成MyBatis-Plus是一个MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效…

Java——数组中出现次数超过一半的数字

题目链接 牛客在线oj题——数组中出现次数超过一半的数字 题目描述 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次&#xff0c;…

FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问

文章目录前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.1 …

低代码开发重要工具:jvs-flow (流程引擎)2.1.7版本更新内容

流程引擎主要包含了流程定义和编辑、任务分配和处理、流程监控和跟踪、数据模型和存储、条件和规则设置、安全性和权限管理、性能优化以及持续集成和部署等功能&#xff0c;以满足不同业务场景下的需求。 JVS流程引擎从V2版本开始&#xff0c;由flowable切换为 jvs-flow&#…

2023 年 五 大数据恢复软件帮助您找回数据

您是否刚刚丢失了一份需要数天工作才能更换的重要文件&#xff1f;不要恐慌&#xff01;此列表中排名前 10 位的最佳数据恢复软件应用程序可以帮助您找回数据&#xff0c;您甚至可能不必在它们上花任何钱。 五大最佳数据恢复软件工具 以下是我们最喜欢的 10 大数据恢复软件应用…