LeetCode 435 无重叠区间

LeetCode 435 无重叠区间

问题描述:
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:

  • 可以认为区间的终点总是大于它的起点。
  • 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。

贪心思想

执行用时:5 ms, 在所有 Java 提交中击败了35.16%的用户
内存消耗:40 MB, 在所有 Java 提交中击败了20.16%的用户

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        if(intervals==null || intervals.length==0 || intervals[0].length==0 || intervals.length==1) {
            return 0;
        }
        /*按照区间右边界升序排序*/
        Arrays.sort(intervals, new Comparator<int[]>(){
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });
        /*贪心思想:对于每次选择,总是保证能够获得最大不重叠区间数量*/
        int curr = 0, next = 1;
        int count = 0;
        while(next<intervals.length) {
            /*下一区间next 与 当前区间curr 或 当前区间之前区间 重叠,而 当前区间及之前区间 均不重叠*/
            /*因此要获得最大不重叠区间数量,则需要将下一区间next去除(结果count+1)*/
            if(intervals[next][0]<intervals[curr][1]) {
                count++;
            }
            else {
                curr = next;
            }
            next++;
        }
        return count;
    }
}
posted @ 2020-09-09 10:43  CodeSPA  阅读(105)  评论(0编辑  收藏  举报