当前位置: 首页 > ops >正文

无重叠区间问题

题目描述:
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。
示例 1:
输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。
示例 2:
输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
leetcode链接:https://leetcode.cn/problems/non-overlapping-intervals/description/

开始思路

        可以注意到,重叠区间可通过判断区间左右端点是否相交进行判断。因此首先要对给出的区间进行排序,然后依次计算后续区间是否重叠,并更新区间端点。但是该方法没有考虑到图一所示情况,因此,只能通过部分测试案例(提交结果见图二)

图一,此时应选择2、3而不是1
图一,此时应选择2、3而不是1

 
图二,仅通过部分测试用例
图二,仅通过部分测试用例

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end());int overLap = 0;int L, R;L = intervals[0][0];R = intervals[0][1];for(int i=0; i<intervals.size(); i++){cout<<intervals[i][0]<<intervals[i][1]<<' ';}for (int _i = 1; _i < intervals.size(); _i++) {if (intervals[_i][0] < R) {overLap++;} else {R = intervals[_i][1];}}return overLap;}
};

 

贪婪算法

        开始算法的问题在于,题目要求尽可能多的容纳区间,即队列的排序条件应为:1、最先结束;2、最早开始,且以上两个条件中,条件一的优先级 > 条件二。是故,应为以下代码:

bool compare(const vector<int>& k, const vector<int>& l) {if (k[1] != l[1])return k[1] < l[1];return k[0] < l[0];
}
class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), compare);int overLap = 0;int end = 0;for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] >= intervals[end][1]) {end = i;} else {overLap++;}}return overLap;}
};

运行结果:
运行结果

http://www.xdnf.cn/news/14945.html

相关文章:

  • HDLBits刷题笔记和一些拓展知识(十一)
  • git-安装 Gerrit Hook 自动生成changeid
  • Java-Collections、Map
  • 力扣-136.只出现一次的数字
  • C语言宏替换比较练习
  • .NET9 实现对象深拷贝和浅拷贝的性能测试
  • C#使用Semantic Kernel实现Embedding功能
  • 自动化一次通过率
  • LLM探索的时代
  • 【web安全】SQLMap 参数深度解析:--risk 与 --level 详解
  • leetcode202.快乐数
  • 【数据结构】复杂度分析
  • 【王树森推荐系统】召回11:地理位置召回、作者召回、缓存召回
  • LeetCode 1248.统计优美子数组
  • Coze智能体工作流:1分钟生成10个儿童卡通童话故事视频,无需剪辑
  • 一天一道Sql题(day02)
  • 单机分布式一体化数据库的架构设计与优化
  • Android Handler机制与底层原理详解
  • 【芯片测试篇】:93K测试机I2C的设置和调试
  • 可达性分析算法Test1
  • 基于springboot的非遗传承宣传平台
  • 短视频矩阵管理平台的崛起:源头厂商的深度解析
  • 车载通信架构 --- 以太网相关网络安全
  • c++文件操作
  • Git 安装避坑指南:从环境检查到高级配置的全流程解析
  • Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 猎板解析PCB低损耗基材:AI与高频通信的隐形推手
  • 谁主沉浮:人工智能对未来信息技术发展路径的影响研究
  • C++高频知识点(六)
  • 【Python】Python Socket 编程详解:从原理到实践