贪心算法习题讲解 (2)

这里使用到了二维数组的排序,Java中没有可以直接使用的API,需要用到Arrays下面的public static <T> void sort(T[] a, Comparator<? super T> c),需要重写创建一个Comparator并重写compare方法。

class Solution { public int eraseOverlapIntervals(int[][] intervals) { if(intervals==null || intervals.length == 0){ return 0; } //排序 Arrays.sort(intervals,new Comparator<int[]>(){ @Override public int compare(int[] o1, int[] o2){ if(o1[1] != o2[1]){ return o1[1]-o2[1]; } return o1[0]-o2[0]; } }); int res = 1; int pre = 0; for(int i=1;i<intervals.length;i++){ if(intervals[i][0] >= intervals[pre][1]){ res++; pre=i; } } return intervals.length - res; } } 总结

贪心选择性质:在求解一个最优化的问题中,使用贪心的方式选择了一组内容之后,不会影响剩下的子问题的求解。

如果一个问题满足贪心选择性质,则可以使用贪心算法。

证明一个问题是否满足贪心选择性质,可以使用反证法和数学归纳法,通常证明过程不简单。在平时的练习过程中,可以使用举反例的方法进行验证,如果举不出一个反例,则可以尝试使用贪心算法来求解,通常也会得到正确的结果。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpszpw.html