题目:给定一个区间的集合 intervals
,其中 intervals[i] = [starti, endi]
。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
注意 只在一点上接触的区间是 不重叠的。例如 [1, 2]
和 [2, 3]
是不重叠的。
示例 1:
输入: intervals = [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。
示例 2:
输入: intervals = [ [1,2], [1,2], [1,2] ] 输出: 2 解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠
解法:排序+贪心算法
import java.util.Arrays;
public class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(v1, v2)->
{
return v1[0]-v2[0];
});
int ret=0;
int left=intervals[0][0],right=intervals[0][1];
for(int i=1;i<intervals.length;i++)
{
int a=intervals[i][0],b=intervals[i][1];
if(a<right)
{
ret++;
right=Math.min(right,b);
}
else
{
right=b;
}
}
return ret;
}
public static void main(String[] args) {
Solution solution = new Solution();
int[][] intervals = {{1, 2}, {2, 3},{3,4},{1,3}};
System.out.println(solution.eraseOverlapIntervals(intervals));
}
}