zoukankan      html  css  js  c++  java
  • 删除重叠的区间的个数

    删除重叠的区间的个数

    package my;
    
    import java.util.Arrays;
    
    public class NoOverlapIntervals2 {
        int eraseOverlapIntervals(int[][] intervals){
            if(intervals.length == 0){
                return  0;
            }
            //将所有区间按照起始时间排序
            Arrays.sort(intervals ,(v1,v2) -> v1[0] -v2[0]);
            //用一个变量end 记录前期的最小结束时间点,
            //以及一个count 变量记录到目前为止删除掉了多少区间
            int end = intervals[0][1], count =0;
            //从第二个区间开始,判断一下当前区间和前一个区间的结束时间
            for (int i = 1 ;i < intervals.length; i++){
                //当前区间和前一个区间有重叠,即当前区间的起始时间小于上一个区间的结束时间, end 记录下两个结束时间的最小值
                //把结束时间玩的区间删除,计数器加1.
                if(intervals[i][0] < end){
                    end = Math.min(end , intervals[i][1]);
                    count++;
                }else{
                    end = intervals[i][1];
                }
            }
            //如果没有发生重叠,根据贪婪法,更新end 变量为当前区间的结束时间
            return count ;
        }
        public static void main(String[] args){
            int[][] inte= {{1,4},{2,5},{4,9},{7,10},{11,45},{1,2}};
            NoOverlapIntervals2 noi = new NoOverlapIntervals2();
            int n = noi.eraseOverlapIntervals(inte);
            System.out.println(n);
        }
    }
    //在给定区间中,最多有多少个区间相互之间是没有重叠的?
    package my;
    
    import java.util.Arrays;
    
    //在给定区间中,最多有多少个区间相互之间是没有重叠的?
    public class NoOverlapIntervals3 {
        int eraseOverlapIntervals(int[][] intervals){
            if(intervals.length == 0){
                return 0;
            }
            //按照结束时间将所有区间进行排序
            Arrays.sort(intervals ,(v1,v2) -> v1[1] -v2[1]);
            //定义一个变量end 用来记录当前的结束时间;
            //count变量用来记录有多少个没有重叠的区间;
            int end = intervals[0][1] ,count = 1;
            //从第二个区间开始遍历剩下的区间
            for(int i= 1 ;i < intervals.length ; i++){
                //当前区间和前一个结束时间没有重叠,那么计数器加1,同时更新一下新的结束时间
                if(intervals[i][0]  >= end){
                    end = intervals[i][1];
                    count ++;
                }
            }
            //用总区间的个数减去没有重叠的区间个数,即为最少要删除掉的区间个数
            return intervals.length - count;
        }
        public static void main(String[] args){
            int[][] inte= {{1,4},{2,5},{4,9},{7,10},{11,45},{1,2}};
            NoOverlapIntervals3 noi = new NoOverlapIntervals3();
            int n = noi.eraseOverlapIntervals(inte);
            System.out.println(n);
        }
    }
  • 相关阅读:
    AutoFac (控制反转IOC 与依赖注入DI)
    【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑
    Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步
    触发器
    游标的使用
    sql数据库快照与恢复 规则绑定
    磁盘恢复
    修改sql数据库名称
    MVC学习笔记
    NuGet包和功能
  • 原文地址:https://www.cnblogs.com/goodtest2018/p/13636743.html
Copyright © 2011-2022 走看看