思考:
题目问我们,去除被覆盖区间之后,还剩下多少区间,那么我们可以先算一算,被覆盖区间有多少个,然后和总数相减就是剩余区间数。
对于这种区间问题,如果没啥头绪,首先排个序看看,比如我们按照区间的起点进行升序排序。先对区间中的首元素升序排序,再按照首元素相同时,区间尾元素降序排序,我们需要保证长的那个区间在上面(按照终点降序),这样才会被判定为覆盖,否则会被错误地判定为相交,少算一个覆盖区间。
最后分别有三种情况的区间放置形式,当为覆盖区间时,res++。
class Solution {
public int removeCoveredIntervals(int[][] intervals) {
// 按照起点升序排列,起点相同,降序排列
Arrays.sort(intervals,(a,b)->{
if(a[0] == b[0]){
return b[1] - a[1];
}
return a[0] - b[0];
});
// 记录合法区间的起点和终点
int left = intervals[0][0];
int right = intervals[0][1];
// 记录覆盖区间的数目
int res = 0;
for (int i = 1;i<intervals.length;i++){
int[] intv = intervals[i];
// 情况一:找到覆盖区间
if(left<=intv[0]&&right>=intv[1]){