leetcode 分餅乾 貪心演算法python

2021-10-07 05:58:54 字數 2058 閱讀 3017

描述

樣例樣例1:

輸入:[1,2,3], [1,1]

輸出:1

說明:你有三個孩子和兩塊餅乾,三個孩子的貪吃指數分別是1,2,3

雖然你有兩塊餅乾,但是因為它們的大小都為1,你只能滿足讓貪吃指數為1的孩子滿足,因此你應該輸出1

樣例2:

輸入:[1,2], [1,2,3]

輸出:2

說明:你有兩個孩子和三塊餅乾,兩個孩子的貪吃指數分別是1和2

這三塊餅乾的大小足以滿足所有的孩子,因此你應該輸出2

貪心演算法求解

貪心演算法原理:

貪心策略是指從問題的初始狀態出發,通過若干次貪心選擇得出最優值(或較優解)的一種解法。其實,從「貪心策略」一詞可以看出,貪心策略總是做出在當前看來最優的選擇。也就是說,貪心策略並不是從整體上 考慮問題,他所作的選擇只是在某種意義上的區域性最優解,而許多問題自身的特性決定了該題運用貪心策略可以得到最優解或者比較好的解。

特點:1)貪心選擇的性質:所謂貪心選擇的性質是指應用同一規劃,將原問題變為乙個相似的但規模更小的子問題,而後做出的每一步選擇都是當前看似最佳的選擇。這種選擇依賴於已做出的選擇,但不依賴於未做出 的選擇。從全域性來看,運用貪心解決的問題在程式執行過程中無回溯過程。

2)區域性最優解:區域性最優解是貪心的數學描述。

本題思路:盡量用小的餅乾滿足小的胃口:

**1

class

solution

:"""

@param g: children's greed factor

@param s: cookie's size

@return: the maximum number

"""deffindcontentchildren

(self, g, s)

:# write your code here

g.sort(

)#對小朋友胃口進行排序

s.sort(

)#對餅乾進行排序

i=0#記錄結果

for cookie in s:

#遍歷餅乾

if i >=

len(g)

:#如果結果長度大於等於小朋友長度,說明每個小朋友都進行了一次判斷,退出

break

if g[i]

<=cookie:

#如果胃口小於餅乾尺寸

i+=1#換下乙個小朋友胃口來判斷

return i

c=solution(

)d=c.findcontentchildren([1

,2],

[1,2

,3])

print

(d)

結果:2

**2

class

solution

:def

findcontentchildren

(self, children, cookies)

: children.sort(

) cookies.sort(

) res=

0#記錄結果

g=0#記錄小朋友胃口

s=0#記錄餅乾

while g<

len(children)

and s<

len(cookies)

:if children[g]

<=cookies[s]

:#如果當前小朋友胃口<=當前餅乾尺寸

s+=1#餅乾加1

g+=1#小朋友加1

res+=

1#結果加1

else:#

s+=1#餅乾加1,換下一塊餅乾來和當前小朋友匹配

return res

c=solution(

)d=c.findcontentchildren([1

,2],

[1,2

,3])

print

(d)

結果:

貪心演算法 分糖果 分餅乾

假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i 都有乙個胃口值 gi 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j 都有乙個尺寸 sj 如果 sj gi 我們可以將這個餅乾 j 分配給孩子 i 這個孩子會得到滿足。你的目標是盡可能滿足...

leetcode 455 分發餅乾(貪心演算法)

假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i,都有乙個胃口值 g i 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j,都有乙個尺寸 s j 如果 s j g i 我們可以將這個餅乾 j 分配給孩子 i 這個孩子會得到滿足。你的目標是盡...

455 分發餅乾(貪心演算法)

假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i 都有乙個胃口值 gi 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j 都有乙個尺寸 sj 如果 sj gi 我們可以將這個餅乾 j 分配給孩子 i 這個孩子會得到滿足。你的目標盡可能滿足越...