Python貪心算法Greedy Algorithm解決案例小結(jié)
貪心算法
在每一次做決策時,保證當(dāng)下的決策是最優(yōu)的,從而使得最后的結(jié)果是最優(yōu)的。
分發(fā)餅干
假設(shè)你是一位很棒的家長,想要給你的孩子們一些小餅干。但是,每個孩子最多只能給一塊餅干。
對每個孩子 i,都有一個胃口值 g[i],這是能讓孩子們滿足胃口的餅干的最小尺寸;并且每塊餅干 j,都有一個尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個餅干 j 分配給孩子 i ,這個孩子會得到滿足。你的目標(biāo)是盡可能滿足越多數(shù)量的孩子,并輸出這個最大數(shù)值。
# 最好的選擇是不要浪費(fèi)餅干
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
# 先對胃口值和餅干尺寸排序
g.sort()
s.sort()
g_l = len(g)
g_index = 0
s_l = len(s)
s_index = 0
# 計數(shù)
count = 0
# 終止條件:孩子數(shù) 和 餅干數(shù)是否在條件內(nèi)
while g_index < g_l and s_index < s_l:
# 胃口小于餅干
if g[g_index] <= s[s_index]:
# 餅干被消耗
count += 1
g_index += 1
s_index += 1
# 胃口大于餅干
else:
# 尋求更多的餅干滿足胃口
s_index += 1
return count無重疊區(qū)間
給定一個區(qū)間的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除區(qū)間的最小數(shù)量,使剩余區(qū)間互不重疊 。
輸入: intervals = [[1,2],[2,3],[3,4],[1,3]]
輸出: 1
解釋: 移除 [1,3] 后,剩下的區(qū)間沒有重疊。
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
# 判斷是否為空
if not intervals:
return 0
# 對end值進(jìn)行升序排序
intervals.sort(key = lambda x: x[1])
# 維護(hù)一個最小值
end_pos = intervals[0][1]
# 只有單個區(qū)間時無重疊?。?!因此定義為1
count = 1
# 終止條件
for i in range(1, len(intervals)):
# 判斷是否連續(xù)
if end_pos <= intervals[i][0]:
count += 1
end_pos = intervals[i][1]
return len(intervals) - count二維數(shù)組排序的方法:intervals.sort(key = lambda x: x[1])
思路轉(zhuǎn)換:求最小移除數(shù)組,意味著求最大連續(xù)數(shù)組
檸檬水找零
輸入:bills = [5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那里,我們按順序收取 3 張 5 美元的鈔票。
第 4 位顧客那里,我們收取一張 10 美元的鈔票,并返還 5 美元。
第 5 位顧客那里,我們找還一張 10 美元的鈔票和一張 5 美元的鈔票。
由于所有客戶都得到了正確的找零,所以我們輸出 true。
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
five, ten, twenty = 0, 0, 0
for bill in bills:
if bill == 5:
five += 1
if bill == 10:
# 是否可以找回
if five <= 0:
return False
# 收下 10 元
ten += 1
# 找回 5 元
five -= 1
if bill == 20:
# 是否可以找回一張5元和一張10元
if five > 0 and ten > 0:
five -= 1
ten -= 1
twenty += 1
# 是否可以找回三張 5 元
elif five >= 3:
five -= 3
twenty += 1
else:
return False
return True以上就是Python貪心算法Greedy Algorithm解決案例小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Python貪心算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python通過getopt模塊如何獲取執(zhí)行的命令參數(shù)詳解
這篇文章主要給大家介紹了關(guān)于python通過getopt模塊如何獲取執(zhí)行的命令參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
jupyter 實現(xiàn)notebook中顯示完整的行和列
這篇文章主要介紹了jupyter 實現(xiàn)notebook中顯示完整的行和列,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python實現(xiàn)獲取Windows設(shè)備信息
這篇文章主要為大家詳細(xì)介紹了如何在Python中獲取設(shè)備網(wǎng)絡(luò)標(biāo)識(MAC地址)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-04-04
Python asyncio核心原理與高階應(yīng)用全解析
這篇文章主要介紹了Python asyncio核心原理與高階應(yīng)用,asyncio是Python中強(qiáng)大的異步I/O框架,它允許我們編寫高效的并發(fā)代碼,通過掌握asyncio的高級應(yīng)用,我們可以編寫更加高效、響應(yīng)迅速的應(yīng)用程序,需要的朋友可以參考下2026-05-05
Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄
這篇文章主要介紹了Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Python批量寫入ES索引數(shù)據(jù)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用python腳本批量寫ES數(shù)據(jù)(需要使用pip提前下載安裝es依賴庫),感興趣的小伙伴可以學(xué)習(xí)一下2024-02-02

