每日一题—— 无重叠区间

阅读 35

2022-03-30

无重叠区间:给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
思路:先对数组按右边界进行排序,从最小的右边界开始与下一个的左边界进行比较,如果大于则i++,如果小于则交换边界,并且count++。

 public int eraseOverlapIntervals(int[][] intervals) {
        if(intervals.length == 0) return 0;
        Arrays.sort(intervals,new Comparator<int [] >(){
            public int compare(int [] a1,int [] a2) {
                return a1[1] - a2[1];   //升序排列
            }
        });
        int count = 1;
        int end = intervals[0][1];
        for (int i = 0; i < intervals.length; i++){
            if (end <= intervals[i][0]){
                end = intervals[i][1];
                count++;
            }
        }
        return intervals.length - count;
    }

精彩评论(0)

0 0 举报