zoukankan      html  css  js  c++  java
  • 无重叠区间

    题目:

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

      注意:

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

    题解:贪心区间问题。先按边界排序,再比较后一个区间的起点是否前一个区间的终点重叠。代码如下:

    Java版本

       public int eraseOverlapIntervals(int[][] intervals) {
           if(intervals.length == 0) return 0;
            //按照右边界排序
            Arrays.sort(intervals,(a,b)-> { return a[1] -b[1];});      
            int end = intervals[0][1];
            int count = 0;
            for(int i=1;i<intervals.length;i++){
                if(intervals[i][0] < end) count++;//移除重叠的区间,end不变
                else end = intervals[i][1];
            }
            
            return count;
        }

    JS版本

    var eraseOverlapIntervals = function(intervals) {
        if(intervals.length == 0) return 0;
    
        //按照右边界排序
        intervals.sort(function(a,b){
            return a[1] - b[1];
        });
        
        let end = intervals[0][1];
        let count = 0;
        for(let i=1;i<intervals.length;i++){
            if(intervals[i][0] < end) count++;//移除重叠的区间,end不变
            else end = intervals[i][1];
        }
        
        return count;
            
    };

    总结:无重叠区间、用最少的箭射爆气球、最多可观看电影场数问题都是贪心区间问题,解题思路一样。先按照边界排序,再比较后一个区间的起点和前一个区间的终点的大小,即可判断出两个区间是否重叠。

  • 相关阅读:
    苹果审核被拒,Guideline 1.1.6
    Java基础:类与继承
    Java中的static关键字解析
    Entity Framework 预备知识
    Entity Framework Code First执行SQL语句、视图及存储过程
    java多线程技能
    流与文件
    多线程
    集合
    断言
  • 原文地址:https://www.cnblogs.com/bobobjh/p/14415855.html
Copyright © 2011-2022 走看看