Java-9.11-435

在这里插入图片描述
在这里插入图片描述
按照区间的结尾进行从小到大的排序
依旧是贪心算法,因为选择的区间的结尾越小,越可能在后面增加区间

class Solution {
    
    
    public int eraseOverlapIntervals(int[][] intervals) {
    
    
        if(intervals.length==0) {
    
    
			return 0;
		}
		Arrays.sort(intervals,new Comparator<int[]>() {
    
    

			@Override
			public int compare(int[] o1, int[] o2) {
    
    
				return o1[1]-o2[1];
			}
		});
		int cnt=1;
		int end=intervals[0][1];
		for(int i=1;i<intervals.length;i++) {
    
    
			if(intervals[i][0]<end) {
    
    
				continue;
			}
			cnt++;
			end=intervals[i][1];
		}
		return intervals.length-cnt;
    }
}

这是隐式的创建比较器,也可以单独的创建一个类,如下

import java.util.Comparator;

public class MyComparator implements Comparator<int[]>{
    
    

	@Override
	public int compare(int[] o1, int[] o2) {
    
    
		return o1[1]-o2[1];  //按区间结尾从小到大排序
	}
}
public static int eraseOverlapIntervals(int[][] intervals) {
    
    
		if(intervals.length==0) {
    
    
			return 0;
		}
		MyComparator mcmp=new MyComparator();
		Arrays.sort(intervals,mcmp);
		
		int cnt=1;
		int end=intervals[0][1];
		for(int i=1;i<intervals.length;i++) {
    
    
			if(intervals[i][0]<end) {
    
    
				continue;
			}
			cnt++;
			end=intervals[i][1];
		}
		return intervals.length-cnt;
    }

	public static void main(String[] args) {
    
    
		int[][] intervals= {
    
    {
    
    1,2},{
    
    2,3},{
    
    3,4},{
    
    1,3}};
		System.out.println(eraseOverlapIntervals(intervals));
	}

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/109014672