代码随想录训练营Day27:贪心算法05区间问题

1.435无重叠区间

思路:可以延续前面的引爆气球的思路,所以本题的贪心策略为:对于相同起始位置的,删去终点位置靠右的,只留下一个最靠左的。对于具有不同的起始位置的,但是存在重复的情况(即当前的left与前面的那个的right具有重复的地方),谁的更加靠右删除那个。最后就是如果无重复就不管了。

具体实现:

  1. 比较器的设计,按照先比较left的升序,再在相同的left的情况下按照right的降序排序
  2. 四种不同的情况的分类讨论【left,right】的比较。
class Solution {
public://设计的一个比较器,按照a[0]的升序进行排列,a[1]的降序进行排列static bool cmp(vector<int>& a,vector<int>& b){if(a[0] == b[0])return a[1]>b[1];return a[0]<b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end(),cmp);int n = intervals.size();int val = 0;int left = intervals[0][0];int right = intervals[0][1];for(int i = 1;i<n;i++){//会遇到三种情况//1.起始位置相同的时候,删除前面那个。//2.虽然起始位置不同,但是前面那个的终止位置大于此时的起始位置,前面那个终止位置大于等于此时的终止位置删除前面那个//3.虽然起始位置不同,但是前面那个的终止位置大于此时的起始位置,前面那个终止位置小于此时的终止位置删除这个//4.虽然起始位置不同,但是前面的终止位置小于等于此时的起始位置,更新终止位置,但是不做删除//方法2:找到非交叉区间,然后用总的长度减去即可if(intervals[i][0] == left){val++;right = intervals[i][1];}else{if(right>intervals[i][0]){val++;if(right>=intervals[i][1]){left = intervals[i][0];right = intervals[i][1];}}else{left = intervals[i][0];right = intervals[i][1];}} }return val;}
};

2.763划分字母区间

贪心策略:首先用一个num[26]的数组记载这个s中每个字母出现的最右侧的位置。再通过更新right的位置(这里需要注意的是,right为所有左侧字母对应的最右侧的位置),如果i == right,代表的情况就是一种情况左侧的所有字母的最右侧的位置都小于等于i,即为一个字母区间。

具体实现:

  1. 使用num数组来统计最右的位置
  2. 使用right = max(right, num[s[i] - 'a']);来找到所有左侧字母对应的最右侧的位置。
  3. i == right来确定字母区间
class Solution {
public:vector<int> partitionLabels(string s) {int n = s.size();int num[26]={0};for(int i = 0;i<n;i++){num[s[i]-'a'] = i; }vector<int> result;int left = 0;int right = 0;for (int i = 0; i < s.size(); i++) {right = max(right, num[s[i] - 'a']); // 找到字符出现的最远边界if (i == right) {result.push_back(right - left + 1);left = i + 1;}}return result;}
};

3.56合并区间

贪心策略:按照前面的无重叠区间的方法进行一个类似的排序。不过这个地方可以直接使用sort函数来比较left即可。然后判断intervals[i][0]和right的比较,从而确定是否可以合并,如果可以合并,更新right,如果不能合并,更新区间。

实现细节:

  1. 首先需要对一个有序数组进行排序
  2. left,right与intervals[i][0]的比较及其后序的更新策略。
  3. 最后需要将最后一个[left,right]添加进去。
class Solution {
public:
//先将对应的一个interval按照left进行排列,再对其进行处理vector<vector<int>> merge(vector<vector<int>>& intervals) {int n = intervals.size();sort(intervals.begin(),intervals.end());vector<vector<int>> ans;int left = intervals[0][0];int right = intervals[0][1];cout<<left<<right;for(int i= 1;i<n;i++){if(intervals[i][0]>right){ans.push_back({left,right});left = intervals[i][0];right = intervals[i][1];}else{if(intervals[i][1]>right){right = intervals[i][1];}}}ans.push_back({left,right});return ans;}
};

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

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

相关文章

html+css-Day1(盒子模型)

一、常用属性 1、字体设置font "line-height" 是 CSS 中的一个属性&#xff0c;用于设置文本行之间的距离&#xff0c;也就是行间距。它影响着段落、行内元素或者任何包含文本的元素的可读性。"line-height" 可以设置为数字、长度单位&#xff08;如 px、e…

数据结构——希尔排序

基本思想&#xff1a; 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述…

【代码随想录算法训练Day3】LeetCode 203.移除链表元素、LeetCode 707.设计链表、LeetCode 206.反转链表

Day3 链表 链表也是一种很重要的数据结构&#xff0c;链表的优势是空间不必连续&#xff0c;分配比较自由&#xff0c;缺点是不支持随机访问&#xff0c;想要获取链表中间的某个元素&#xff0c;必须要从头遍历。 LeetCode 203.移除链表元素【虚拟头结点】 移除链表中的某个…

【图文教程】PyCharm安装配置PyQt5+QtDesigner+PyUic+PyRcc

这里写目录标题 PyQt5、Qt Designer、PyUic、PyRcc简介&#xff08;1&#xff09;下载安装PyQt5&#xff08;2&#xff09;打开designer.exe所在位置&#xff08;3&#xff09;在PyCharm中配置QtDesigner&#xff08;4&#xff09;验证QtDesigner是否配置成功&#xff08;5&…

通过编写dockerfile部署python项目

docker命令总览 docker通过dockerfile构建镜像常用命令 # 创建镜像&#xff08;进入dockerfile所在的路径&#xff09; docker build -t my_image:1.0 .# 查看镜像 docker images# 创建容器 docker run -dit --restartalways -p 9700:9700 --name my_container my_image:1.0 #…

阿里发布通义千问2.5:一文带你读懂通义千问!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

就业班 第三阶段(zabbix) 2401--5.9 day1 普通集zabbix 5.0部署 nginx部署+agent部署

文章目录 环境一、zabbix 5.0 部署1、安装yum源2、安装相关软件3、数据库安装和配置mariaDB数据库mysql57数据库 安装mysql万能卸载mysql代码&#xff1a;启动mysql并初始化4、数据表导入5、修改配置&#xff0c;启动服务6、配置 web GUI7、浏览器访问注意数据加密的选项不要勾…

分享四种免费获取SSL的方式

SSL证书目前需要部署安装的网站很多&#xff0c;主要还是基于国内目前对证书的需求度在不断的升高&#xff0c;网站多了、服务器多了之后。网络安全问题就成为了大家不得不面对的一个重要的问题了。SSL证书的作用有很多&#xff0c;这里就不一一详述了&#xff0c;本期作品主要…

一次消谐器适用于各种电压等级的电力系统

你知道什么是一次消谐器吗&#xff1f;它是一种保护装置&#xff0c;用于消除电力系统中的谐振过电压&#xff0c;保护设备的安全可靠运行。那么一次消谐器有什么作用呢&#xff1f;接下来我会为你详细介绍一下。 一次消谐器的设计原理是利用其非线性电阻特性&#xff0c;在谐振…

RSAC 2024现场:谷歌展望大模型在网络安全领域的前景

人类距离将网络安全的控制权交给生成式AI还有多远&#xff1f; 前情回顾RSAC2024动态 伪造内容鉴别厂商Reality Defender斩获2024 RSAC创新沙盒冠军 RSAC 2024上值得关注的10款网络安全产品 RSAC 2024创新沙盒十强出炉&#xff0c;谁能夺冠&#xff1f; 安全内参5月8日消息…

table表格 如何加卡片 实现?

实现非常简单 代码 const columnsinsu [{dataIndex: nowdate,key: nowdate,render: (text, record) ><Cardhoverablestyle{{width: 97%,height: 90,}}// cover{<img alt"example" src"https://os.alipayobjects.com/rmsportal/QBnOOoLaAfKPirc.png&…

浅析安全用电监控系统在工厂的研究与应用论述

摘 要&#xff1a;随着社会时代的发展&#xff0c;人们的安全意识越来越强烈&#xff0c;在人们生活和工作中离不开各种用电设备&#xff0c;用电设备的安全使用是保障人们生命安全的重要内容。工厂因自身厂内工作环境的特殊性&#xff0c;用电设备的种类多且复杂&#xff0c;如…

指针的奥秘(二):指针与数组的联系+字符指针+二级指针+指针数组+《剑指offer》笔试题

指针 一.指针与数组的联系1.数组名的理解2.使用指针访问数组3.一维数组传参的本质 二.字符指针1.字符指针隐藏秘密2.常量字符串3.《剑指offer》笔试题 三.二级指针四.指针数组1.指针数组模拟二维数组 一.指针与数组的联系 1.数组名的理解 也许大部分人认为数组名就是一个名称&…

分页PageHelper、PageInfo

PageHelper是一个基于MyBatis的分页插件&#xff0c;可以帮助开发者快速、方便地实现分页功能。PageHelper支持多种数据库&#xff08;包括MySQL、Oracle、SQL Server、PostgreSQL等&#xff09;&#xff0c;可以通过简单的配置即可使用。 使用PageHelper&#xff0c;只需要在…

TL-WN826N无线网卡连接电脑蓝屏,提示rtl8188gu.sys

TL-WN826N无线网卡插电脑就蓝屏&#xff0c;提示rtl8188gu.sys 处理方法&#xff1a; 设备管理器中卸载其他的2.0无线网卡程序和功能中卸载网卡驱动TPlink官网下载 TL-WN826N V1.0_1.0.0&#xff08;https://www.tp-link.com.cn/product_572.html?vdownload&#xff09;&…

【Osek网络管理测试】[TG4_TC3]LimpHome状态下的睡眠中断

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT在LimpHome状态下的睡眠中断是否正确 分析:在跛脚运行状态下,满足睡眠条件后,进入到NM…

欧盟MDR法规对医疗器械网络安全都有哪些要求?

MDR&#xff0c;欧盟医疗器械法规&#xff08;Medical Device REGULATION (EU) 2017/745&#xff0c;简称“MDR”&#xff09;&#xff0c;当医疗器械办理欧盟CE认证时&#xff0c;需满足新法规 MDR (EU) 2017/745要求。 M DR符合性评估 医械网络安全咨询与相关文件出具&#x…

【Linux】项目自动化构建工具make/makefile

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后…

【知识碎片】2024_05_09

本篇记录了关于C语言的一些题目&#xff08;puts&#xff0c;printf函数的返回值&#xff0c;getchar&#xff0c;跳出多重循环&#xff09;&#xff0c;和一道关于位运算的代码&#xff3b;整数转换&#xff3d;。 C语言碎片知识 如下程序的功能是&#xff08; &#xff09; #…

从古代故事中领悟高情商回话

页面 页面代码 <% layout(/layouts/default.html, {title: 故事管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"box-header"><div class"box-title">&l…