LeetCode 435. Non-overlapping Intervals(无重叠区间)

题目描述:计算让一组区间不重叠所需要移除的区间个数。—区间调度问题

  1. 先计算最多能组成的不重叠区间个数,然后用区间总个数减去不重叠区间的个数。
  2. 在每次选择中,区间的结尾最为重要,选择的区间结尾越小,留给后面的区间的空间越大,那么后面能够选择的区间个数也就越大。
  3. 按区间的结尾进行排序,每次选择结尾最小,并且和前一个区间不重叠的区间。
  4. 边界相同并不算相交
   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;
    }

在这里插入图片描述

发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104898384
今日推荐