盜用labuladong的一個解釋凄鼻,覺得說的挺好的腊瑟。
什么是貪心算法呢?貪心算法可以認為是動態(tài)規(guī)劃算法的一個特例块蚌,相比動態(tài)規(guī)劃闰非,使用貪心算法需要滿足更多的條件(貪心選擇性質(zhì)),但是效率比動態(tài)規(guī)劃要高峭范。
比如說一個算法問題使用暴力解法需要指數(shù)級時間财松,如果能使用動態(tài)規(guī)劃消除重疊子問題,就可以降到多項式級別的時間纱控,如果滿足貪心選擇性質(zhì)辆毡,那么可以進一步降低時間復(fù)雜度,達到線性級別的甜害。
什么是貪心選擇性質(zhì)呢舶掖,簡單說就是:每一步都做出一個局部最優(yōu)的選擇,最終的結(jié)果就是全局最優(yōu)尔店。注意哦眨攘,這是一種特殊性質(zhì)主慰,其實只有一部分問題擁有這個性質(zhì)。
這道題要求——找到需要移除區(qū)間的最小數(shù)量期犬,即連續(xù)區(qū)間最多的河哑,所以我們可以將區(qū)間排序,每次選擇符合要求的最小的右區(qū)間龟虎。記錄幾個點:
1 判斷為空的情況,這個總忘記沙庐,if(intervals.length?==?0)?return?0;
2 二維數(shù)組按照列排隊的兩種寫法鲤妥,沒啥區(qū)別,一個是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