40講系列7 貪心演算法

2022-06-08 01:33:09 字數 938 閱讀 3225

貪心(greedy)演算法:在對問題求解時,總是做出在當前看來是最好的選擇。

由於貪心演算法每一次操作都需要取最大值或最小值,所以通常需要對陣列排序。

適用greedy 的場景:

問題能夠分成子問題來解決,子問題的最優解能遞推到最終問題的最優解。 如果不能使用貪心演算法,只需要舉出反例即可。

貪心選擇性質的證明(利用反證法,證明貪心演算法的正確性):

貪心演算法為a,最優演算法為o;如果證明過程中發現a完全能替代o,且不影響求出最優解,則出現矛盾。

貪心演算法與動態規劃的不同:

貪心對每個子問題的解決方案都作出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。

方法1:貪心(針對此問題的特殊解法,因為一天可以買賣無數次),一次遍歷,只要只要後一天比前一天大 就在今天**然後明天賣出(時間複雜度:o(n))

class

solution

}return

res;

}}

方法2:dp(解決**問題的通用方法)------(時間複雜度:o(n))

class

solution

return dp[n - 1][0];

*//**

* 空間壓縮 , 每一天的狀態只與前一天的狀態有關,

*/int n =prices.length;

int dp0 = 0, dp1 = -prices[0];

for (int i = 1; i < n; i++)

return

dp0;

}}

第一組:leetcode455. 分發餅乾、leetcode392. 判斷子串行

第二組(貪心演算法與動態規劃):leetcode435. 無重疊區間

貪心演算法精講

一 貪心演算法的基本概念當乙個問題具有最優子結構性質時,我們會想到用動態規劃法去解它。但有時會有更簡單有效的演算法。我們來看乙個找硬幣的例子。假設有四種硬幣,它們的面值分別為二角五分 一角 五分和一分。現在要找給某顧客六角三分錢。這時,我們會不假思索地拿出2個二角五分的硬幣,1個一角的硬幣和3個一分...

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

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

演算法40講

找女朋友問題 如果能夠後悔 o n 如果不能後悔 priority queue 乙個任務的密度 重要程度 完成時間 始終完成最緊迫的工作 kelly formula 凱利公式 game theory 博弈論 五個 的模板 手寫 1 遞迴的終止條件 遞迴 defrecurison level,para...