❝在貪心演算法:用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間。❞
按照左邊界經行排序後,如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要乙個弓箭
如圖:
模擬射氣球的過程,很多同學真的要去模擬了,實時把氣球從陣列中移走,這麼寫的話就複雜了,從前向後遍歷重複的只要跳過就可以的。
在貪心演算法:無重疊區間中要去掉最少的區間,來讓所有區間沒有重疊。
我來按照右邊界排序,從左向右記錄非交叉區間的個數。最後用區間總數減去非交叉區間的個數就是需要移除的區間個數了。
如圖:
細心的同學就發現了,此題和 貪心演算法:用最少數量的箭引爆氣球非常像。
弓箭的數量就相當於是非交叉區間的數量,只要把弓箭那道題目**裡射爆氣球的判斷條件加個等號(認為[0,1][1,2]不是相鄰區間),然後用總區間數減去弓箭數量 就是要移除的區間數量了。
把貪心演算法:用最少數量的箭引爆氣球**稍做修改,別可以ac本題。
修改後的c++**如下:
class solution
int eraseoverlapintervals(vector>& intervals)
else
}return intervals.size() - result;}};
貪心演算法:劃分字母區間中我們要把這個字串劃分為盡可能多的片段,同一字母最多出現在乙個片段中。
這道題目leetcode上標的是貪心,其實我不認識是貪心,因為沒感受到區域性最優和全域性最優的關係。
但不影響這是一道好題,思路很不錯,「通過字元出現最遠距離取並集的方法,把出現過的字元都圈到乙個區間裡」。
解題過程分如下兩步:
如圖:
貪心演算法:合併區間中要合併所有重疊的區間。
相信如果錄友們前幾天區間問題的題目認真練習了,今天題目就應該算簡單一些了。
具體操作:按照左邊界從小到大排序之後,如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]左邊界 < intervals[i - 1]右邊界,則一定有重複,因為intervals[i]的左邊界一定是大於等於intervals[i - 1]的左邊界。
如圖:
本週的主題就是用貪心演算法來解決區間問題,經過本週的學習,大家應該對區間的各種合併分割有一定程度的了解了。
其實很多區間的合併操作看起來都是常識,其實貪心演算法有時候就是常識,哈哈,但也別小看了貪心演算法。
在貪心演算法:合併區間中就說過,對於貪心演算法,很多同學都是:「如果能憑常識直接做出來,就會感覺不到自己用了貪心, 一旦第一直覺想不出來, 可能就一直想不出來了」。
所以還是要多看多做多練習!
「「**隨想錄」裡總結的都是經典題目,大家跟著練就節省了不少選擇題目的時間了」。
就醬,循序漸進選演算法,認準「**隨想錄」,值得介紹給每一位學習演算法的朋友們!
-------end-------
我將演算法學習相關的資料已經整理到了github :裡面還有leetcode刷題攻略、各個型別經典題目刷題順序、思維導圖看一看一定會有所收穫,如果給你有幫助給乙個star支援一下吧!
「**隨想錄」期待你的關注!
每天8:35準時推送一道經典演算法題目,推送的每道題目都不是孤立的,而是由淺入深,環環相扣,幫你梳理演算法知識脈絡,輕鬆學演算法!
leetcode 本週小結!(貪心演算法系列四)
本文 已經收錄,裡面還有leetcode刷題攻略 各個型別經典題目刷題順序 思維導圖,可以fork到自己倉庫,有空看一看一定會有所收穫,如果對你有幫助也給乙個star支援一下吧!在貪心演算法 用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間...
總結 貪心演算法 貪心演算法入門總結
英語 greedy algorithm,又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。貪心演算法在有最優子結構的問題中尤為有效。最優子結構的意思...
貪心演算法小結
貪心,即要最好的。通過找每一步的最優解來找整體的最優解。該演算法要求該題能分成幾步進行,且每一步可運用相同的方法並有最優解。能夠將乙個問題劃分成有限個子問題,通過尋找子問題的最優解來找全域性的最優解。特性 1。候選集合a 有乙個以最優方式來解決的問題,為了構造問題的解決方案,有乙個候選物件的集合,將...