LeetCode 算法题库【455】——分发饼干

分发饼干

题目描述:

ti
mu

解题思路:
  • 第一种:贪心算法简陋版。我们可以先将这两个列表进行排序,然后同时从头开始遍历查找,优先满足那些数字小的,也就是胃口更小的小朋友,所以从小到大,只要存在s中有大于等于g的元素,说明这个元素就可以满足条件,就给child_number加一,然后将数组s用切片方法截去j元素及之前的元素。方法比较暴力,所以时间复杂度比较大。
  • 时间复杂度:O(NM)
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        child_number = 0
        s.sort()
        g.sort()
        for i in g:
            for j in s:
                if i <= j:
                    child_number += 1
                    s = s[s.index(j)+1:]
                    break
        return child_number

1

  • 第二种:贪心算法升级版。我们接下来对上面第一种方法进行优化改进,这里我们跟上面一样也先是要将这两个列表进行顺序排序,然后定义吃了饼干孩子的数目和饼干的数目,这里可以看作是双指针分别在gs列表中,只要满足孩子胃口值小于饼干尺寸,就说明这个孩子可以被满足,child_number就加一,因为每次分配,无论饼干吃或被吃,都要判断下一个饼干的尺寸,所以饼干数目也要加一。
  • 时间复杂度:O(NlogN)
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()
        child_number = 0
        biscuits_number = 0
        while child_number < len(g) and biscuits_number < len(s):
            if g[child_number] <= s[biscuits_number]:
                child_number += 1
            biscuits_number += 1
        return child_number

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值