盗用labuladong的一个解释,觉得说的挺好的。
什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。
比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时间复杂度,达到线性级别的。
什么是贪心选择性质呢,简单说就是:每一步都做出一个局部最优的选择,最终的结果就是全局最优。注意哦,这是一种特殊性质,其实只有一部分问题拥有这个性质。
这道题要求——找到需要移除区间的最小数量,即连续区间最多的,所以我们可以将区间排序,每次选择符合要求的最小的右区间。记录几个点:
1 判断为空的情况,这个总忘记,if(intervals.length == 0) return 0;
2 二维数组按照列排队的两种写法,没啥区别,一个是lambda表达式另一个是普通写法:
Arrays.sort(intervals, Comparator.comparingInt(o -> o[1]));
Arrays.sort(intervals, new Comparator<int[]>(){
public int compare(int a[], int[]b){
return a[1] - b[1];
}
});
代码:
https://github.com/hanleirx/LeetCode/blob/master/435.%20%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4
网友评论