博客
关于我
LeetCode 435 无重叠区间 HERODING的LeetCode之路
阅读量:167 次
发布时间:2019-02-28

本文共 1379 字,大约阅读时间需要 4 分钟。

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

注意:

可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。

示例 1:

输入: [ [1,2], [2,3], [3,4], [1,3] ]

输出: 1

解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: [ [1,2], [1,2], [1,2] ]

输出: 2

解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: [ [1,2], [2,3] ]

输出: 0

解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/non-overlapping-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

首先按照每个区间的右端排序,因为最后判断条件都是通过右端判断的,然后遍历数组,对比下一个的左端与前面固定的右端,选择去留,代码如下:

bool compare(vector
& a, vector
& b){ return a[1] < b[1]; }class Solution { public: int eraseOverlapIntervals(vector
>& intervals) { if(intervals.size() == 0){ return 0; } int num = 1; int len = intervals.size(); // 排序 sort(intervals.begin(), intervals.end(), compare); // 定义右边边界 int right = intervals[0][1]; for(int i = 0 ; i < len - 1; i ++){ // 如果遇到左边大于等于右边边界的,说明是一个完整区间,不交叉 if(intervals[i + 1][0] >= right){ num ++; right = intervals[i + 1][1]; } } cout << num; return len - num; }};/*作者:heroding链接:https://leetcode-cn.com/problems/non-overlapping-intervals/solution/ji-bai-shuang-90zui-hao-li-jie-de-tan-xi-dvtf/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
你可能感兴趣的文章
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>