題目
難度:★★☆☆☆
類型:數(shù)組
假設(shè)你是一位很棒的家長(zhǎng),想要給你的孩子們一些小餅干。但是,每個(gè)孩子最多只能給一塊餅干。對(duì)每個(gè)孩子 i ,都有一個(gè)胃口值 gi ,這是能讓孩子們滿足胃口的餅干的最小尺寸;并且每塊餅干 j ,都有一個(gè)尺寸 sj 。如果 sj >= gi ,我們可以將這個(gè)餅干 j 分配給孩子 i ,這個(gè)孩子會(huì)得到滿足。你的目標(biāo)是盡可能滿足越多數(shù)量的孩子,并輸出這個(gè)最大數(shù)值。
注意:
你可以假設(shè)胃口值為正。
一個(gè)小朋友最多只能擁有一塊餅干。
示例
示例 1:
輸入: [1,2,3], [1,1]
輸出: 1
解釋:
你有三個(gè)孩子和兩塊小餅干,3個(gè)孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅干,由于他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應(yīng)該輸出1。
示例 2:
輸入: [1,2], [1,2,3]
輸出: 2
解釋:
你有兩個(gè)孩子和三塊小餅干,2個(gè)孩子的胃口值分別是1,2。
你擁有的餅干數(shù)量和尺寸都足以讓所有孩子滿足。
所以你應(yīng)該輸出2.
解答
先將孩子按照胃口從小到大排序,餅干從小到大排序,我們需要以下流程統(tǒng)計(jì)滿足條件的孩子:
計(jì)數(shù)器,用于統(tǒng)計(jì)滿足胃口的小孩數(shù)量,每當(dāng)滿足胃口時(shí),計(jì)數(shù)器+1;
指針,這里定義兩個(gè)指針,一個(gè)用于小孩數(shù)組(g_),一個(gè)用于餅干數(shù)組(s_),兩個(gè)數(shù)組均從小到大進(jìn)行遍歷;
條件,如果當(dāng)前餅干大于孩子胃口,那么要執(zhí)行的操作是:計(jì)數(shù)器+1,小孩數(shù)組指針+1,餅干數(shù)組指針+1;否則只需要把餅干數(shù)組指針+1即可,考察下一個(gè)餅干。
循環(huán)控制。這里用指針是否越界來(lái)進(jìn)行循環(huán)控制,當(dāng)任意指針越界時(shí)跳出循環(huán)。
class Solution:
def findContentChildren(self, g, s):
g.sort() # 小孩按照胃口從小到大排序
s.sort() # 餅干按照從小到大排序
g_, s_, count = 0, 0, 0 # 初始化小孩指針、餅干指針和計(jì)數(shù)器
while g_ < len(g) and s_ < len(s): # 循環(huán)控制
if g[g_] <= s[s_]: # 如果當(dāng)前餅干滿足了當(dāng)前小孩的胃口
count += 1 # 計(jì)數(shù)器+1
g_ += 1 # 下一個(gè)小孩
s_ += 1 # 下一塊餅干
else: # 如果沒(méi)有滿足
s_ += 1 # 看看下一塊餅干
return count # 返回滿足胃口的小孩數(shù)
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~