给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
示例 1:
输入: intervals = [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3]
后,剩下的区间没有重叠。
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(a,b)->{
return Integer.compare(a[0],b[0]);
});
int remove = 0;
int pre=intervals[0][1];
for (int i = 0; i < intervals.length; i++) {
if(pre>intervals[i][0]){
remove++;//边界重合,必然要删除一个
pre=Math.min(pre,intervals[i][1]);//谁的右边界小删除谁
}else pre=intervals[i][1];//更新为当前右边界
}
return remove;
}
本题采用按照左区间进行排序,每次选择最小右边界(贪心)