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);
        }
    }
  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/goodtest2018/p/13636743.html
Copyright © 2011-2022 走看看