代码随想录算法训练营day31

代码随想录算法训练营

—day31

文章目录

  • 代码随想录算法训练营
  • 前言
  • 一、 56. 合并区间
  • 二、738. 单调递增的数字
  • 三、968.监控二叉树
  • 总结


前言

今天是算法营的第31天,希望自己能够坚持下来!
今日任务:
● 56. 合并区间
● 738.单调递增的数字
● 968.监控二叉树


一、 56. 合并区间

题目链接
文章讲解
视频讲解
在这里插入图片描述

思路:
1.先对区间以左边界进行排序
2.遍历区间,重叠的就对区间进行合并,更新右边界;不重叠的直接放入结果集
这里有个技巧,把第一个区间直接放入结果集,然后遍历的时候直接在结果集中进行合并区间

class Solution {
public:// static bool cmp(const vector<int>& a, const vector<int>& b) {//     return a[0] < b[0];// }vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() == 0) return result;//用lambda表达式sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b) {return a[0]<b[0];});//第一个区间直接放入结果集,之后在结果集中进行合并result.push_back(intervals[0]);for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] <= result.back()[1]) { //重叠//合并区间,就是更新结果集里面的右边界,左边界已经按大小排序了,只有右边界需要判断取最大值result.back()[1] = max(intervals[i][1], result.back()[1]);} else {result.push_back({intervals[i][0], intervals[i][1]}); //不重叠}}return result;}
};

二、738. 单调递增的数字

题目链接
文章讲解
视频讲解

思路:

  1. 将数字转成字符串来处理
  2. 后序遍历,如果左边数字比当前数字大,记录当前数字位置flag,并且左边数字-1
  3. 记录的flag及以后的数字都变成9

代码如下:

class Solution {
public:int monotoneIncreasingDigits(int n) {string s = to_string(n); //转成字符串来处理int flag = s.size(); //记录需要变成9的数字位置for (int i = s.size() - 1; i > 0; i--) { //后序遍历,一直到第二个数字if (s[i - 1] > s[i]) { //左边数字比右边大flag = i;s[i - 1]--; //左边的数字-1,后面的数字全部变成9}}//flag位置及后面的数字全部变成9for (int i = flag; i < s.size(); i++) {s[i] = '9';}return stoi(s);}
};

三、968.监控二叉树

题目链接
文章讲解
视频讲解

思路:
整体思路是让叶子节点的父节点放监控,可以覆盖到叶子节点和父节点的父节点两层。

定义二叉树节点的三种状态:
0.无覆盖
1.有监控
2.有覆盖

思考空节点是什么状态:
空节点需要返回2有覆盖,因为空节点如果返回0和1都会影响“让叶子节点的父节点放监控”这个最初的设定。

思考遍历顺序:
需要左右节点反馈结果给中间节点,使用后序遍历。

递归三部曲:
1.递归的参数和返回值:参数是节点,返回值是自定义的三种节点状态(0,1,2)
2.终止条件:遇到空节点终止。
3.单层递归逻辑:
有三种情况:
情况一:左右节点都有覆盖,那么当前节点无覆盖,需要当前节点的父节点放监控,返回0
情况二:左右任一节点无覆盖,那么当前节点都需要放监控,返回1(result++)
情况三:左右任一节点有监控,那么当前节点就是有覆盖,返回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 result;//定义三种状态,0:无覆盖,1:有摄像头 2:有覆盖//叶子节点往上遍历,使用后序遍历(左右中)//叶子节点的父节点放摄像头int traversal(TreeNode* root) {//空节点返回2有覆盖if (root == nullptr) return 2;int left = traversal(root->left);int right = traversal(root->right);//1.左右节点都有覆盖,当前节点无覆盖,返回0(父节点安装摄像头)if (left == 2 && right == 2) return 0;//2.左右节点任意一个无覆盖,当前节点安装摄像头,返回1if (left == 0 || right == 0) {result++;return 1;}//3.左右节点任意一个有摄像头,当前节点有覆盖,返回2if (left == 1 || right == 1) return 2;return -1;}int minCameraCover(TreeNode* root) {result = 0;//4.根节点返回0,本来需要在其父节点安装摄像头来覆盖的,需要加多一个摄像头在根节点if (traversal(root) == 0) result++;return result;}
};

总结

贪心算法终于结束了,之前没接触过贪心算法,学完这一章后受益匪浅。每次看题目都会不禁“啊?”,然后看完题解又会有种茅塞顿开的感觉!

明天继续加油!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过maven命令上传jar包至nexus v3.7.1

1 nexus和maven的简介 1.1 nexus ‌Nexus‌是由Sonatype公司开发的一款强大的制品仓库管理软件&#xff0c;主要用于搭建和管理各种类型的仓库&#xff0c;包括Maven、NuGet、npm等。Nexus支持多种仓库类型&#xff0c;如代理仓库&#xff08;代理互联网中的中央仓库&#xf…

level(三) filterblock

filterblock用于确定某个key是否存在于某个datablock中&#xff0c;在插入一个key到datablock中时也会插入一个key到filterblock中&#xff0c;filterblock中会记录所有的key&#xff0c;并通过布隆过滤器来确定一个key是否存于这个datablock中。下面来看下filterblock的代码&a…

优化 Vue项目中 app.js 文件过大,初始化加载过慢、带宽占用过大等问题

已亲测&#xff0c;绝对有效&#xff0c;底部有改善前后对比图证明。 1.服务器 nginx 增加配置 #开启gzip压缩 gzip on; #设置gzip压缩级别&#xff0c;2级是性价比最高的 gzip_comp_level 2; #设置动态gzip压缩的文件类型 gzip_types text/plain text/css text/javascript a…

浅谈云计算16 | 存储虚拟化技术

存储虚拟化技术 一、块级存储虚拟化基础2.1 LUN 解析2.1.1 LUN 概念阐释2.1.2 LUN 功能特性 2.2 Thick LUN与Thin LUN2.2.1 Thick LUN特性剖析2.2.2 Thin LUN特性剖析 三、块级存储虚拟化技术实现3.1 基于主机的实现方式3.1.1 原理阐述3.1.2 优缺点评估 3.2 基于存储设备的实现…

手摸手实战前端项目CI CD

由于图片和格式解析问题&#xff0c;为了更好阅读体验可前往 阅读原文 CI/CD 是 持续集成&#xff08;Continuous Integration&#xff09; 和 持续交付/部署&#xff08;Continuous Delivery/Continuous Deployment&#xff09; 的缩写&#xff0c;是现代软件开发中的一种自动…

【EI 会议征稿通知】第七届机器人与智能制造技术国际会议 (ISRIMT 2025)

第七届机器人与智能制造技术国际会议 (ISRIMT 2025) 2025 7th International Symposium on Robotics & Intelligent Manufacturing Technology 会议主要围绕“机器人”、“智能制造技术” 等研究领域展开讨论&#xff0c;旨在为机器人与智能制造技术等领域的专家学者、工…

【Linux】信号

目录 一、信号的概念二、信号的产生2.1 通过键盘进行信号的产生2.2 通过系统调用进行信号的产生2.2.1 kill函数2.2.2 raise函数2.2.3 abort函数 2.3 通过异常的方式进行信号的产生2.4 通过软件条件的方式进行信号的产生2.4.1 关闭管道读端2.4.2 alarm函数 2.5 Core Dump&#x…

基于go语言的驾考系统设计与实现

在Internet时代&#xff0c;Internet信息技术已广泛应用于各个领域。 对人们的生活以及学习产生了较大的影响。通过信息技术建立的驾照考试管理系统&#xff0c;利用系统对驾照考试进行统一的管理&#xff0c;能够提驾照考试管理的工作效率&#xff0c;具有重要的现实意义。 本…

鸿蒙打包发布

HarmonyOS应用/元服务发布&#xff08;打包发布&#xff09; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密钥&#xff1a;包含非对称加密中使用的公钥和私钥&#xff0c;存储在密钥库文件中&#xff0c;格式…

基于Linux系统指令使用详细解析

一 Linux系统常用操作命令编辑快捷 1.1终端快捷键&#xff1a; Ctrl a/Home 切换到命令行开始 Ctrl e/End 切换到命令行末尾 Ctrl l 清除屏幕内容&#xff0c;效果等同于 clear Ctrl u 清除剪切光标之前的内容 Ctrl k 剪切清除光标之后的内容 Ctrl y 粘贴刚才所删…

深度学习-87-大模型训练之预训练和微调所用的数据样式

文章目录 1 大模型训练的阶段1.1 预训练1.1.1 全量预训练1.1.2 二次预训练1.2 微调2 预训练需要的数据2.1 清洗成的文本文档2.2 如何从文本文档学习2.3 常见预训练中文语料库3 微调需要的数据3.1 微调例子一:电商客服场景3.2 微调例子二:行政咨询场景3.3 微调数据长什么样3.3…

基于 STM32 的多功能时间管理器项目

引言 在快节奏的生活中&#xff0c;时间管理显得尤为重要。本项目旨在通过 STM32 开发一个多功能时间管理器&#xff0c;功能包括计时器、闹钟和日历。用户可以方便地设置不同的提醒和计时任务&#xff0c;以更好地管理日常生活和工作。 项目名称 多功能时间管理器 环境准备 …

麦田物语学习笔记:代码链接UI实现时间日期对应转换

基本流程 时间系统UI如下 本篇文章将UI和TimeManager里的数据联系在一起, 1.代码思路 (1)新建TimeUI.cs挂载在GameTime物体上,然后获取它的子物体这些组件来改变里面的数值,所以需要获得Day & Night的子物体Image中的Rect Transform,用于旋转季节的图标;获得Clock每个子物…

HTML文章翻页功能

效果展示&#xff1a; 效果原理&#xff1a; 1、引入CDN 2、绘制文章翻页样式&#xff0c;以及自动分段 3、获取窗口宽高&#xff0c;计算出当前文章总分段&#xff0c;并实现分页 4、完整代码 <!DOCTYPE html> <html><head><meta charset"utf-8&qu…

深度学习电影推荐-CNN算法

文章目录 前言视频演示效果1.数据集环境配置安装教程与资源说明1.1 ML-1M 数据集概述1.1.1数据集内容1.1.2. 数据集规模1.1.3. 数据特点1.1.4. 文件格式1.1.5. 应用场景 2.模型架构3.推荐实现3.1 用户数据3.2 电影数据3.3 评分数据3.4 数据预处理3.5实现数据预处理3.6 加载数据…

代理模式实现

一、概念&#xff1a;代理模式属于结构型设计模式。客户端不能直接访问一个对象&#xff0c;可以通过代理的第三者来间接访问该对象&#xff0c;代理对象控制着对于原对象的访问&#xff0c;并允许在客户端访问对象的前后进行一些扩展和处理&#xff1b;这种设置模式称为代理模…

2024年11月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(一)

软考高级系统架构设计师考试包含三个科目&#xff1a;信息系统综合知识、系统架构设计案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午综合知识科目的选择题&#xff0c;同时附带参考答案、解析和所涉知识点。 由于机…

【Kafka】Linux+KRaft集群部署指南

【Kafka】LinuxKRaft集群部署指南 摘要本地环境说明官网准备工作快速开始修改config/kraft/server.properties初始化数据存储目录 新节点加入集群启动停止测试创建topic创建生产者创建消费者 摘要 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在…

【GIS操作】使用ArcGIS Pro进行海图的地理配准(附:墨卡托投影对比解析)

文章目录 一、应用场景二、墨卡托投影1、知识点2、Arcgis中的坐标系选择 三、操作步骤1、数据转换2、数据加载3、栅格投影4、地理配准 一、应用场景 地理配准是数字化之前必须进行的一项工作。扫描得到的地图数据通常不包含空间参考信息&#xff0c;需要通过具有较高位置精度的…

计算机网络 (45)动态主机配置协议DHCP

前言 计算机网络中的动态主机配置协议&#xff08;DHCP&#xff0c;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;主要用于自动分配IP地址和其他网络配置参数给连接到网络的设备。 一、基本概念 定义&#xff1a;DHCP是一种网络协议&#xf…