题目的链接在这里:https://leetcode-cn.com/problems/non-overlapping-intervals/
题目大意
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
一、示意图
二、解题思路
java实现(贪心算法)
代码如下:
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length==0){
return 0;
}
//这里的贪心策略就是,按照结尾小的区间进行排序,原因是在于,结尾越小,给别人的空间(也就是另一个的开头能取的范围就越大)
int res=0;
//所以第一步是对二维数组进行增量排序,并且是按照尾部的增量
//这里是用了lambda表达式写的,对数组排序
Arrays.sort(intervals,(a,b)->a[1]-b[1]);
//排序之后就需要开始判断了,这就感觉和我之前那个写的一样了
int i=0;
//判断的方法也和我之前的不一样,刚开始的尾巴是这个
int pre=intervals[0][1];
for(i=1;i<intervals.length;i++) {
if (intervals[i][0] < pre) {
//如果当前值的前头小于之前的后面那个值
res++;
} else {//不然的话,就可以记录更新下去了
pre = intervals[i][1];
}
}
return res;
}
}