删除重叠的区间的个数

删除重叠的区间的个数

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);
    }
}

 

上一篇:Leetcode之合并区间


下一篇:leetcode-----56. 合并区间