leetcode 本週小結!(貪心演算法系列四)

2021-10-12 20:03:44 字數 1982 閱讀 3686

本文 已經收錄,裡面還有leetcode刷題攻略、各個型別經典題目刷題順序、思維導圖,可以fork到自己倉庫,有空看一看一定會有所收穫,如果對你有幫助也給乙個star支援一下吧!

在貪心演算法:用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間。

按照左邊界經行排序後,如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要乙個弓箭

如圖:

模擬射氣球的過程,很多同學真的要去模擬了,實時把氣球從陣列中移走,這麼寫的話就複雜了,從前向後遍歷重複的只要跳過就可以的。

在貪心演算法:無重疊區間中要去掉最少的區間,來讓所有區間沒有重疊。

我來按照右邊界排序,從左向右記錄非交叉區間的個數。最後用區間總數減去非交叉區間的個數就是需要移除的區間個數了。

如圖:

細心的同學就發現了,此題和 貪心演算法:用最少數量的箭引爆氣球非常像。

弓箭的數量就相當於是非交叉區間的數量,只要把弓箭那道題目**裡射爆氣球的判斷條件加個等號(認為[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]的左邊界。

如圖:

本週的主題就是用貪心演算法來解決區間問題,進過本週的學習,大家應該對區間的各種合併分割有一定程度的了解了。

其實很多區間的合併操作看起來都是常識,其實貪心演算法有時候就是常識,哈哈,但也別小看了貪心演算法。

在貪心演算法:合併區間中就說過,對於貪心演算法,很多同學都是:「如果能憑常識直接做出來,就會感覺不到自己用了貪心, 一旦第一直覺想不出來, 可能就一直想不出來了」。

所以還是要多看多做多練習!

「**隨想錄」裡總結的都是經典題目,大家跟著練就節省了不少選擇題目的時間了

就醬,循序漸進選演算法,認準「**隨想錄」,值得介紹給每一位學習演算法的朋友們!

如果感覺對你有幫助,不要吝嗇給乙個?吧!

總結 貪心演算法 本週小結!(貪心演算法系列四)

在貪心演算法 用最少數量的箭引爆氣球中,我們開始講解了重疊區間問題,用最少的弓箭射爆所有氣球,其本質就是找到最大的重疊區間。按照左邊界經行排序後,如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要乙個弓箭 如圖 模擬射氣球的過程,很多同學真的要去模擬了,實時把氣球從陣列中移走,這麼寫的話...

貪心演算法小結

貪心,即要最好的。通過找每一步的最優解來找整體的最優解。該演算法要求該題能分成幾步進行,且每一步可運用相同的方法並有最優解。能夠將乙個問題劃分成有限個子問題,通過尋找子問題的最優解來找全域性的最優解。特性 1。候選集合a 有乙個以最優方式來解決的問題,為了構造問題的解決方案,有乙個候選物件的集合,將...

貪心演算法小結

最優子結構 對比dfs,不是進行各種可選支路的試探,而是當下就可用某種策略確定選擇,無需考慮未來 未來情況的演變也影響不了當下的選擇 只要一直這麼選下去,就能得出最終的解,每一步都是當下 子問題 的最優解,那麼最終得出的結果就是問題的最優解,這叫做最優子結構。更書面的說法 如果問題的乙個最優解中包含...