题目描述:计算让一组区间不重叠所需要移除的区间个数。—区间调度问题
- 先计算最多能组成的不重叠区间个数,然后用区间总个数减去不重叠区间的个数。
- 在每次选择中,区间的结尾最为重要,选择的区间结尾越小,留给后面的区间的空间越大,那么后面能够选择的区间个数也就越大。
- 按区间的结尾进行排序,每次选择结尾最小,并且和前一个区间不重叠的区间。
- 边界相同并不算相交
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length == 0) return 0;
//按照end升序排列
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return a[1] - b[1];
}
});
//不重叠区间个数,初始最大不重叠区间个数为1个,即排序后结尾最小的第一个区间
int count = 1;
int end = intervals[0][1];
for(int i = 1; i < intervals.length; i ++) {
//若下一个起点 “大于等于” 终点,即又来一个新的不重叠区间
if(intervals[i][0] >= end) {
count ++;
end = intervals[i][1];
}
}
return intervals.length - count;
}