LeetCode-435无重叠区间-贪心

在这里插入图片描述
将二维数组排序,Java库里边有对二维数组排序的方法,可以重写二维数组排序,要想升序直接返回左边减右边,降序反之
排序之后,从左到右遍历,左边末端大于右边首端,则有重复区间(用pre记录左边的)
有重复区间,pre不变,继续与下一个比较
没重复区间,pre向下移,与下一个比较

		int delN=0;
        int size=intervals.length;
        //0个或一个都不用删除
        if(size<=1){
    
    
            return  0;
        }
        //[[1,2],[2,4],[1,3]]  二维数组中每个区间的尾部值为  intervals[i][1]
        //使用java Arrays的排序
        Arrays.sort(intervals, new Comparator<int[]>() {
    
    
            @Override
            public int compare(int[] o1, int[] o2) {
    
    
                return o1[1]-o2[1];//返回1代表降序,返回0代表降序
            }
        });


        //排序之后,从左到右进行筛选,右边有和左边重复的区间则跳过
        //两个区间比较是否重复
        int pre=intervals[0][1];
        for (int i=1;i<size;i++){
    
    
            //如果有右边有重复区间,pre不变
            if(pre>intervals[i][0]){
    
    
                delN++;
            }else{
    
    
                //如果右边没重复区间,则pre往右边移动
                pre=intervals[i][1];
            }
        }
        return delN;

猜你喜欢

转载自blog.csdn.net/WA_MC/article/details/115273484