Leetcode 435. 无重叠区间——Java解题思路解析
本题是使用了贪心算法,结合Arrays.sort的重载方法
一、题目描述
题目描述
给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。
输入输出样例
输入是一个数组,数组由多个长度固定为 2 的数组组成,表示区间的开始和结尾。输出一个整数,表示需要移除的区间数量。
Input: [[1,2], [2,4], [1,3]]
Output: 1
在这个样例中,我们可以移除区间 [1,3],使得剩余的区间 [[1,2], [2,4]] 互不重叠。
二、思路
1. 贪心算法
贪心算法简单,解题分为两步:先对二维数组按照右区间进行排序;再比较当前区间右区间与下一个区间的左区间是否重合,即得出区间不重复的最大数组。
首先对二维数组按照右区间进行排序:
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] intervals1, int[] intervals2){
return intervals1[1] - intervals2[1];
}
});
这里是Arrays.sort重载的方法,详情可以查看以下链接:
Arrays.sort()详解:https://www.cnblogs.com/SupremeBoy/p/12717532.html
接着按当前区间右区间与下一个区间的左区间进行比较,没有交集即证明当前右区间小于下一个区间左区间。代码如下:
int right = intervals[0][1];
int num = 1;
for(int i = 1; i < intervals.length; i