吴师兄学算法day08 贪心 LC455. 分发饼干

题目:

易错点:

  • 这两个变量名容易弄混
  • s是饼干
  • g是胃口

图示:

我的代码:

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        # 对饼干s排序
        s.sort()
        # 对孩子们的胃口g进行排序
        g.sort()

        # 用两个变量来记录目前的索引下标
        child = 0
        cookie = 0
        while child < len(g) and cookie < len(s):
            # 如果饼干s大小满足孩子的胃口g就记录
            if s[cookie] >= g[child]:
                child +=1
            cookie +=1 # 无论满不满足都增加饼干的数量
        # 返回满足孩子的数量
        return child

老师的代码:

# 登录 AlgoMooc 官网获取更多算法图解
# https://www.algomooc.com
# 作者:程序员吴师兄
# 代码有看不懂的地方一定要私聊咨询吴师兄呀
# 分发饼干( LeetCode 455 ):https:#leetcode-cn.com/problems/assign-cookies/
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        # 1、将孩子们的胃口值按照从小到大的顺序排列
        # 优先满足胃口小的孩子
        g.sort()

        # 2、将饼干按照从小到大的顺序排列
        s.sort()

        # child 代表 g 的下标,即表示有多少孩子的胃口得到满足
        child = 0

        # child 代表 s 的下标,即表示目前有多少饼干被使用了
        cookie = 0

        # 遍历所有的饼干
        # 遍历过后,饼干只有两种状态
        # 1、要么找到了需要这个饼干的孩子
        # 2、要么剩下的孩子中,胃口值最低的孩子都大于这个饼干的值,那么这个饼干没人要
        while cookie < len(s) and child < len(g) :
            # 孩子的胃口得到了满足
            if s[cookie] >= g[child] :
                # 得到满足的孩子数量加 1
                child += 1
            
            # 查看下一个饼干能否找到需要的孩子
            cookie += 1
        
        # 最后返回孩子数量
        return child

扩展写法:

总结:

  • 在机场等飞机的过程中,也可以写代码。
  •  

贪心

  • 应该是,先求局部最优解,把这个局部最优解转化为全局最优解。

参考:

https://r07na4yqwor.feishu.cn/docx/AeTjdU9gJoRts2xDX5EcQ2CFnYd

 

posted @ 2024-01-18 23:07  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报