分饼干

博客围绕LeetCode 12.25日每日一题展开,题目是给孩子分饼干,要尽可能满足多数量孩子。解题思路是采用贪心算法,先将孩子胃口值和饼干尺寸从小到大排序,再依次遍历,为每个孩子找满足胃口的最小尺寸饼干,选到后取出该饼干。

LeetCode每日一题(12.25日)
Merry Christmas : D
给你的孩子们一些小饼干。每个孩子最多只能给一块饼干。
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。目标是尽可能满足多数量的孩子,并输出最大数值。
示例:g=[1,2,3] s=[1,1]1
explain: 三个孩子胃口分别为1,2,3,只有两块小饼干尺寸为1. 则最多只能满足胃口为1的小孩,所以返回1.
链接:https://leetcode-cn.com/problems/assign-cookies

要满足尽可能多的小孩,则考虑贪心算法。找局部最优解,找满足当前胃口的最小尺寸饼干。
所以先从小到大排序,在依次遍历。
对每一个小孩找到它的最小尺寸饼干,选到以后,这块饼干取出。

def findContentChildren(self, g, s) -> int:
g.sort()
s.sort()
i=0;j=0;n=0
gn=len(g);sn=len(s)
while i<gn and j<sn:
    while j<sn and s[j]<g[i]:
        j+=1
    if j<sn :
        n+=1
    i+=1
    j+=1
return n       
### P1749 饼干 算法析 #### 题目概述 题目描述通常涉及将一定数量的饼干配给若干孩子,目标是最优地满足孩子们的需求。这类问题的核心在于如何通过合理的策略最大化满足条件的孩子人数。 此类问题可以归类为贪心算法的应用场景之一[^3]。具体来说,可以通过排序和匹配的方式解决该问题。 --- #### 贪心算法思路 为了使更多的孩子得到满足,应优先考虑需求较小的孩子,并尝试用最小尺寸的饼干满足他们。这样可以保留较大的饼干用于满足后续可能更难满足的孩子。 以下是具体的实现步骤: - **输入处理**:获取孩子的胃口列表 `g` 和饼干尺寸列表 `s`。 - **排序操作**:别对两个数组进行升序排列,以便从小到大依次匹配。 - **双指针遍历**:使用两个指针别指向当前未被满足的孩子以及尚未使用的饼干,逐一尝试匹配。 最终返回成功匹配的数量作为结果。 --- #### Python 实现代码 ```python def findContentChildren(g, s): g.sort() s.sort() child_index = 0 # 孩子索引 cookie_index = 0 # 饼干索引 satisfied_children = 0 # 满足的孩子计数器 while child_index < len(g) and cookie_index < len(s): if s[cookie_index] >= g[child_index]: satisfied_children += 1 child_index += 1 cookie_index += 1 return satisfied_children ``` 此函数实现了基于贪心的思来解决问题的方法[^3]。 --- #### 复杂度析 - 时间复杂度:主要由两部组成——排序的时间开销 \(O(n \log n)\),其中 \(n\) 是孩子或饼干的数量;随后是一次线性的扫描过程 \(O(m+n)\),因此总体时间复杂度为 \(O((m+n) \log (m+n))\)[^3]。 - 空间复杂度:仅需常量额外空间存储变量,故空间复杂度为 \(O(1)\)。 --- #### 测试案例 以下是一个简单的测试例子: ```python if __name__ == "__main__": children_greed = [1, 2, 3] cookies_size = [1, 1] result = findContentChildren(children_greed, cookies_size) print(result) # 输出应该是 1 ``` 在这个例子中,仅有第一个孩子能够获得一块合适的饼干,其余两人则无法满足其需求。 --- ### 总结 对于饼干这一经典问题,采用贪心算法是一种高效且直观的解决方案。通过对数据预排序并利用双指针技术完成匹配操作,能够在较短时间内得出最优解。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值