iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
Software Development

都是 P 開頭的程式語言,你是在 py 啥啦系列 第 27

[27] 用 python 刷 Leetcode: 455

原始題目

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.

Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j].
If s[j] >= g[i], we can assign the cookie j to the child i, and the child i will be content.
Your goal is to maximize the number of your content children and output the maximum number.

Example 1:

Input: g = [1,2,3], s = [1,1]
Output: 1
Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3.
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
You need to output 1.

Example 2:

Input: g = [1,2], s = [1,2,3]
Output: 2
Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
You need to output 2.

Constraints:

  • 1 <= g.length <= 3 * 104
  • 0 <= s.length <= 3 * 104
  • 1 <= g[i], s[j] <= 231 - 1

題目分析

有一串小孩的胃口,和另一串餅乾數量。要滿足最多小孩的胃口

解題過程

看到這種滿足OO、讓最多XX怎樣怎樣的題目,直覺就是使用貪婪演算法

  1. 排序胃口跟餅乾
  2. 餅乾從最小到最大,依序餵飽小孩
  3. 餵飽後計數器 +1
  4. 如果餅乾無法滿足指定的小孩,則跳出迴圈
  5. 回傳可滿足的小孩數量
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()

        # 可以餵飽的小孩數量
        res = 0
        
        # 遍歷所有餅乾
        for i in range(len(s)):
            # 如果可餵飽的數量小於小孩總數,且餅乾大小大於下一個小孩的胃口。則餵飽數量 +1
            if res < len(g) and s[i] >= g[res]:
                res += 1
            else:
                break
        return res

結果

result


上一篇
[26] 用 python 刷 Leetcode: 150 evaluate reverse polish notatio
下一篇
[28] 用 python 刷 Leetcode: 1013
系列文
都是 P 開頭的程式語言,你是在 py 啥啦30

尚未有邦友留言

立即登入留言