0
点赞
收藏
分享

微信扫一扫

VC中易混淆的几个概念系列(一):初始化与关闭对话框

夜空一星 2023-09-23 阅读 36

区间未重叠数量计算:

class Solution {
    public int findMinArrowShots(int[][] points) {
        //需要用第一种比较器?第二种会报错,在涉及数的大小边界的时候
        Arrays.sort(points,(a, b) -> Integer.compare(a[0], b[0]));
        //(a, b) -> Integer.compare(a[0], b[0])
        //(p1,p2)->(p1[0]-p2[0])
        int count=1;
        for(int i=1;i<points.length;i++){
            if(points[i][0]>points[i-1][1]){//如果区间未重叠
                count++;//未重叠区间数量+1
            }else{
                points[i][1]=Math.min(points[i][1],points[i-1][1]);//更新最小的区间的右边界
            }
        }
        return count;
    }
}

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
在这里插入图片描述
先计算出所有非重叠区间数量,然后只要把判断条件加个等号(认为[0,1][1,2]不是相邻区间),然后用总区间数减去非重叠区间数量 就是要移除的区间数量了。

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals,(p1,p2)->Integer.compare(p1[0],p2[0]));
        int count=1;
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>=intervals[i-1][1]){//如果区间未重叠
                count++;//未重叠区间数量+1
            }else{
                intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);//更新最小的区间的右边界
            }
        }
        return intervals.length-count;
    }
}
举报

相关推荐

0 条评论