LeetCode を解いた(455. Assign Cookies)
2024/03/27言語は Python3 でやってます。
問題
https://leetcode.com/problems/assign-cookies/description/
子供を表したリストと、クッキーを表したリストの 2 つが渡される。 子供は、リストの長さが子供の人数を表していて、各数値が「満足する最低のクッキーのサイズ」を表している。 クッキーは、リストの長さがクッキーの数を表していて、各数値がクッキーのサイズを表している。
手持ちのクッキーで、満足させられる子供の最大数を求める問題。
解答 ①
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
cookie = 0
child = 0
cursor_cookie = 0
cursor_child = 0
while cursor_cookie < len(s) and cursor_child < len(g):
child = g[cursor_child]
cookie = s[cursor_cookie]
if child <= cookie:
cursor_child += 1
cursor_cookie += 1
if child > cookie:
cursor_cookie += 1
return cursor_child
以下のとおりに動く ① クッキーと子供の数をそれぞれソートして、小さい順にする ② クッキーと子供を比較して、子供が満足できる(子供 <= クッキー)の場合は、次の子供とクッキーを見にいく(カーソルを進める) ③ 子供が満足できない場合、クッキーだけ次を見にいく(カーソルを進める) ④ 子供がいなくなるかクッキーがなくなるまで繰り返して、最終的に子供のカーソルがどれだけ進んだか(何人満足したか)を見にいく
ChatGPT にレビューしてもらったところ、特に問題なさそうだったので、整形したのが以下。
解答 ②
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
cursor_cookie = 0
cursor_child = 0
while cursor_cookie < len(s) and cursor_child < len(g):
if g[cursor_child] <= s[cursor_cookie]:
cursor_child += 1
cursor_cookie += 1
return cursor_child
思ったこと
最初からアプローチには問題なかったので、少しずつ効率的な解法が思いつくようになってきた気がする。