1.题目描述
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
2.解题思路
首先要对区间的头进行排序,这里以区间的开始来排序,然后再遍历区间。
1.如果后面区间的头小于当前区间的尾,比如当前区间[2,6],后面区间是[3,4]或者是[2,5]。
说明这两个区间有重复,必须要移除一个,那么移除哪一个呢?为了防止下一个区间和现有的区间有重叠,我们应该让现有区间越短越好,所以应该移除尾部比较大的,保留尾部比较小的。
2.如果后面区间的头不小于当前区间的尾,说明他们没有重合,不需要移除。
如下图区间[1,2]和[1,3]有了重叠,我们需要移除尾部比较大的,也就是红色区间[1,3]。
3.实验代码
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if (intervals.length == 0)
return 0;
//先排序
Arrays.sort(inte