代码随想录训练营day36

第八章 贪心算法 part05

1.LeetCode. 无重叠区间

1.1题目链接:435. 无重叠区间

文章讲解:代码随想录
视频讲解:B站卡哥视频

1.2思路:我来按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。

此时问题就是要求非交叉区间的最大个数。

这里记录非交叉区间的个数还是有技巧的,如图:
在这里插入图片描述
区间,1,2,3,4,5,6都按照右边界排好序。

当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?

就是取 区间1 和 区间2 右边界的最小值,因为这个最小值之前的部分一定是 区间1 和区间2 的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。

接下来就是找大于区间1结束位置的区间,是从区间4开始。那有同学问了为什么不从区间5开始?别忘了已经是按照右边界排序的了。

区间4结束之后,再找到区间6,所以一共记录非交叉区间的个数是三个。

总共区间个数为6,减去非交叉区间的个数3。移除区间的最小数量就是3。

1.3附加代码如下所示:

//该题目和之前的射箭气球问题很相似
class Solution {
public:static bool cmp(const vector<int>&a,const vector<int>&b){return a[0]<b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if(intervals.size()==0)return 0;int result=0;sort(intervals.begin(),intervals.end(),cmp);for(int i=1;i<intervals.size();i++)//如果当前区间左边界大于前一个区间的有边界就不需要进行移除区间操作{if(intervals[i][0]>=intervals[i-1][1]){continue;}else//当前{intervals[i][1]=min(intervals[i][1],intervals[i-1][1]);result++;}}return result;}
};

2.LeetCode.划分字母区间

2.1题目链接:763.划分字母区间

文章讲解:代码随想录
视频讲解:B站卡哥视频

2.2思路:在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。

可以分为如下两步:

统计每一个字符最后出现的位置
从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点如图:

在这里插入图片描述

2.3附加代码如下所示:

class Solution {
public:vector<int> partitionLabels(string s) {vector<int>reuslt;int hash[27]={0};for(int i=0;i<s.size();i++){hash[s[i]-'a']=i;//统计字母最远距离的下标}int left=0;//字符分割的左边界int right=0;//字符分割的右边界for(int i=left;i<s.size();i++){right=max(right,hash[s[i]-'a']);if(right==i)//找到字母最远距离的下标与实际位置对应上了就分割{reuslt.push_back(right-left+1);left=right+1;//更新下一次进行分割的起始点}}return reuslt;}
};

3.LeetCode.合并区间

3.1题目链接:[56. 合并区间(https://leetcode.cn/problems/merge-intervals/)

文章讲解:代码随想录
视频讲解:B站卡哥视频

3.2思路:大家如果认真做题的话,话发现和我们刚刚讲过的452. 用最少数量的箭引爆气球 )和 435. 无重叠区间都是一个套路。

这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑,本题是判断区间重贴后要进行区间合并。

所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。

按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)

这么说有点抽象,看图:(注意图中区间都是按照左边界排序之后了)
在这里插入图片描述
知道如何判断重复之后,剩下的就是合并了,如何去模拟合并区间呢?

其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。

3.3附加代码如下所示:

//精简版
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;sort(intervals.begin(),intervals.end(),cmp);//按照左边界大小进行排序result.push_back(intervals[0]);//先加入第一个集合区间for(int i=1;i<intervals.size();i++){if(intervals[i][0]>result.back()[1])//前后两个集合没有重叠时候,要和加入result中的进行比较而不是原数组中的{result.push_back(intervals[i]);}else //前后两个集合有重叠时候且后一个右边界大于前一个右边界{result.back()[1]=max(result.back()[1],intervals[i][1]);//左边界是不变的,选择前后两个右边界大的那一个}}return result;}
};

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

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

相关文章

Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释(2)

Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释&#xff08;2&#xff09; flyfish Transformer - 注意⼒机制 Scaled Dot-Product Attention 计算过程 Transformer - 注意⼒机制 代码实现 Transformer - 注意⼒机制 Scaled Dot-Product Attention不同的代码比较 Tran…

【数字化转型】上市公司智能制造词频统计数据(1991-2022年)

数据来源&#xff1a;上市公司年报 时间跨度&#xff1a;1991-2022年 数据范围&#xff1a;上市公司 数据指标&#xff1a; 版本一 智能制造 智能机器 智能生产 机器人 全自动 全机器 版本二 宏观政策 中国制造2025 工业4.0 互联网 范式特征 自动化 信息化 信息…

Socks5代理IP使用教程及常见使用问题

当我们在互联网上浏览网页、下载文件或者进行在线活动时&#xff0c;隐私和安全问题常常被提及。在这样的环境下&#xff0c;一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法&#xff0c;帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

QT学习day5

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),socket(new QTcpSocket(this)) {ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false);//不可用ui->sendBtn-&g…

[Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 操作流程&#xff1a;前置&#xff1a;Docker和K8S安装版本匹配查看0.1&#xff1a;安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一&#xff1a;主节点操作 查看主机域名->编辑域名->域名配置二&#xff1a;安装自动填充&#xff0c;虚拟…

如何借助AI高效完成写作提纲

AI变革力量&#xff1a;未来数据中心的智能化之旅&#xff01; 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;在众多领域展现出了它的能力&#xff0c;特别是在写作领域。AI写作工具不仅能够帮助我们高效地生成内容&#xff0c;还能在一定程度上提升…

代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录 目录 系列文章目录455.分发饼干贪心算法大饼干喂胃口大的&#xff08;先遍历胃口&#xff09;胃口大的先吃大饼干(先遍历饼干&#xff09;小饼干先喂胃口小的&#xff08;先遍历胃口&#xff09;胃口小的先吃小饼干&#xff08;先遍历饼干&#xff09; 376. 摆动序…

14-pyspark的DataFrame使用总结

目录 前言DataFrame使用总结 DataFrame的构建方法1&#xff1a;通过列表构建方法2&#xff1a;通过Row对象构建方法3&#xff1a;通过表Schema构建 方法4&#xff1a;rdd结合字符串构建 DataFrame的方法 PySpark实战笔记系列第五篇 10-用PySpark建立第一个Spark RDD(PySpark实战…

CSGO游戏搬砖,落袋为安才是王道

1.市场燃了&#xff0c;都在赚钱&#xff0c;谁在赔钱&#xff1f; 首先要分清“纸面富贵”和“落袋为安”。市场燃了&#xff0c;你库存里的渐变大狙从5000直接涨到了1W&#xff0c;你赚到5000了吗&#xff1f;严格讲&#xff0c;你需要把库存里的渐变大狙卖出去&#xff0c;提…

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…

2024-基于人工智能的药物设计方法研究-AIDD

AIDD docx 基于人工智能的药物设计方法研究 AI作为一种强大的数据挖掘和分析技术已经涉及新药研发的各个阶段&#xff0c;有望推动创新药物先导分子的筛选、设计和发现&#xff0c;但基于AI的数据驱动式创新药物设计和筛选方法仍存在若干亟待解决的问题。我们课题组的核心研究…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑&#xff0c;近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

matlab使用教程(40)—二维傅里叶变换和多项式插值

1使用 FFT 进行多项式插值 使用快速傅里叶变换 (FFT) 来估算用于对一组数据进行插值的三角函数多项式的系数。 1.1数学中的 FFT FFT 算法通常与信号处理应用相关&#xff0c;但也可以在数学领域更广泛地用作快速计算工具。例如&#xff0c;通常通过解算简单的线性系统来计算…

24/04/11总结

IO流(First edition): IO流&#xff1a;用于读入写出文件中的数据 流的方向&#xff08;输入指拿出来,输出指写进去) 输入流:读取 输出流:写出 操作文件类型 字节流:所有类型文件 字符流:纯文本 字节流: InputStream的子类:FileInputStream:操作本地文件的字节输入流 OutputSt…

ssm036基于Java的图书管理系统+jsp

图书管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

光伏电站运维管理系统功能全面详解

一、系统概述 光伏电站运维管理系统是一款专为光伏电站设计的综合性管理平台。该系统集成了先进的数据监测、故障诊断、运维任务管理、设备信息管理、用户权限管理以及系统维护与升级等功能&#xff0c;旨在提供全面、高效、智能的光伏电站运维服务&#xff0c;确保电站安全、…

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍&#xff1a; 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按…

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享&#xff0c;有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念&#xff1a;2.C发展历程3.C如何学&#xff1f; 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…

JavaScript_注释数据类型

JavaScript_语法_注释&数据类型&#xff1a; 1.2注释&#xff1a; 1.单行注释&#xff1a;//注释内容 2.多行注释&#xff1a;/*注释内容*/ 1.3数据类型&#xff1a; 1.原始数据类型(基本数据类型)&#xff1a;&#xff08;只有这五种&#xff09; 1.number&#xff1a;数字…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准&#xff0c;吉林省文化和旅游厅主管&#xff0c;吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术&#xff0c;是自觉、独立而又面向整个社会的艺术&#xff0c;是文化中极具强烈感染力的重要组成部分&…