题目描述

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

注意:

  1. 可以认为区间的终点总是大于它的起点。
  2. 区间 [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

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

解题思路

贪心思想:

先找到个数最多的一系列不重叠区间,用总区间个数减去不重叠区间的个数,就是需要移除的区间个数。

需要先对每个区间排序,排序的依据是区间的结尾的大小,因为区间结尾越小,后面就越能安排多的区间。

public int eraseOverlapIntervals (Interval[] intervals) {
if (intervals.length == 0) return 0; Arrays.sort(intervals, new Comparator<Interval>() {
@Override
public int compare (Interval o1, Interval o2) {
return o1.end - o2.end;
}
}); int count = 1;
int end = intervals[0].end;
for (int i = 1; i < intervals.length; i++) {
if (intervals[i].start<end) continue;
end = intervals[i].end;
count++;
} return intervals.length - count;
}

最新文章

  1. C++之动态数组
  2. CSS魔法堂:你一定误解过的Normal flow
  3. java 16 - 5 LinkedList模拟栈数据结构的集合
  4. Android之创建自定义属性
  5. percona-toolkit系列之介绍和安装(mysql复制工具)
  6. 第二百零四天 how can i 坚持
  7. threading模块
  8. C# json
  9. Android 推断SD卡是否存在及容量查询
  10. java实现——030最小的k个数
  11. 开源一款iOS中国地图行政区控件(含一级与二级行政区)
  12. Beanstalkd,zeromq,rabbitmq的区别
  13. hdu4044
  14. oracle入坑日记&lt;六&gt;自增列创建和清除(含序列和触发器的基础用法)
  15. Ajax的请求规范(二)
  16. 复制文件到U盘错误0x80071AC3,请运行chkdsk并重试
  17. C# 控件
  18. cmd下查看端口被某程序占用命令
  19. Asp.net 从客户端中检测到有潜在危险的Request.Form值
  20. Spring/AOP框架, 以及使用注解

热门文章

  1. Docker 架构原理及简单使用
  2. 【Java笔记】【Java核心技术卷1】chapter3 D1JavaStandard
  3. css实现左边高度自适应右边高度
  4. NAS
  5. 使用DOM4J 对xml解析操作
  6. Redis回顾
  7. Android 框架揭秘 --读书笔记
  8. Mac安装Navicat的那些破事儿
  9. pip安装时使用国内源,加快下载速度
  10. Nginx + fastcgi + php 的原理与关系