news 2026/2/13 14:43:12

LeetCode 455 - 分发饼干

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 455 - 分发饼干


文章目录

    • 摘要
    • 描述
    • 题解答案(核心思路)
      • 贪心策略怎么定?
      • 为什么这个策略是对的?
    • 题解答案(Swift 可运行 Demo)
    • 题解代码分析
      • 1. 为什么一定要排序?
      • 2. 双指针的意义
      • 3. 关键判断逻辑
      • 4. 为什么不会漏解?
    • 示例测试及结果
      • 示例 1
      • 示例 2
      • 自定义测试
    • 实际场景结合
      • 1. 资源分配问题
      • 2. 人力与任务匹配
      • 3. 面试中的信号题
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

LeetCode 455 是一道非常经典的贪心入门题

题目本身不复杂,但如果你第一次写,很容易陷入一种纠结:

  • 是不是要给胃口最大的孩子最大的饼干?
  • 要不要试所有组合?
  • 会不会分配错了,后面没法满足更多孩子?

其实这道题的核心只有一句话:

用最小的资源,优先满足最容易满足的人。

一旦想通这一点,代码就会变得非常干净,而且效率也很高。

描述

你有两组数据:

  • g[i]:第i个孩子的胃口值(最小需要多大的饼干)
  • s[j]:第j块饼干的尺寸

规则很简单:

  • 一个孩子最多只能拿一块饼干
  • 一块饼干只能给一个孩子
  • 只有当s[j] >= g[i],这个孩子才会满足

你的目标不是让所有孩子都满足,而是:

尽可能多地满足孩子,返回最大数量

题解答案(核心思路)

贪心策略怎么定?

这道题的贪心策略其实非常直觉化:

  1. 先排序

    • 孩子的胃口从小到大排
    • 饼干的尺寸从小到大排
  2. 用最小的饼干,去尝试满足胃口最小的孩子

  3. 如果当前饼干满足不了这个孩子,那它也一定满足不了胃口更大的孩子,直接丢弃

  4. 如果能满足,就计数 +1,同时换下一个孩子和下一块饼干

为什么这个策略是对的?

因为:

  • 胃口小的孩子选择空间最大
  • 小饼干是“最稀缺”的资源
  • 如果你用大饼干去喂小胃口的孩子,很可能会浪费掉大饼干

这和现实生活其实一模一样。

题解答案(Swift 可运行 Demo)

classSolution{funcfindContentChildren(_g:[Int],_s:[Int])->Int{// 1. 排序letchildren=g.sorted()letcookies=s.sorted()varchildIndex=0varcookieIndex=0varresult=0// 2. 双指针遍历whilechildIndex<children.count&&cookieIndex<cookies.count{ifcookies[cookieIndex]>=children[childIndex]{// 当前饼干可以满足当前孩子result+=1childIndex+=1cookieIndex+=1}else{// 饼干太小,换一块更大的cookieIndex+=1}}returnresult}}

题解代码分析

1. 为什么一定要排序?

letchildren=g.sorted()letcookies=s.sorted()

排序之后有两个好处:

  • 胃口小的孩子排在前面,优先满足
  • 饼干尺寸从小到大,避免浪费大饼干

如果不排序,你就很难保证当前的分配是“最省资源”的。

2. 双指针的意义

varchildIndex=0varcookieIndex=0

这两个指针分别表示:

  • childIndex:当前要尝试满足的孩子
  • cookieIndex:当前拿来用的饼干

指针只往前走,不回退,这也是贪心算法的典型特征。

3. 关键判断逻辑

ifcookies[cookieIndex]>=children[childIndex]
  • 满足:说明这块饼干是“刚刚好或更大”,直接用
  • 不满足:说明这块饼干太小,留着也没用,换下一块

这里有个非常重要但容易忽略的点:

如果当前饼干满足不了当前孩子,那它一定满足不了后面的孩子。

4. 为什么不会漏解?

因为:

  • 每个孩子只会尝试一次
  • 每块饼干只会使用或丢弃一次
  • 没有回头路,但这是正确的回头路不需要走

示例测试及结果

示例 1

letsolution=Solution()print(solution.findContentChildren([1,2,3],[1,1]))

输出:

1

解释过程:

  • 饼干:[1,1]
  • 孩子胃口:[1,2,3]
  • 只能满足胃口为 1 的孩子

示例 2

print(solution.findContentChildren([1,2],[1,2,3]))

输出:

2

解释过程:

  • 饼干足够
  • 每个孩子都能被满足

自定义测试

print(solution.findContentChildren([2,3,4],[1,2,3]))

结果:

2

解释:

  • 胃口 2 用饼干 2
  • 胃口 3 用饼干 3
  • 胃口 4 无法满足

实际场景结合

这道题的思路在真实世界中非常常见。

1. 资源分配问题

  • 带宽分配
  • 内存分配
  • 任务调度

本质都是:

用有限资源,尽量满足更多请求

2. 人力与任务匹配

比如:

  • 初级任务给初级工程师
  • 高难度任务留给高级工程师

如果你反过来分配,很容易“浪费能力”。

3. 面试中的信号题

这道题经常被用来考:

  • 是否理解贪心的正确性
  • 是否能写出简洁、不绕弯的代码
  • 是否能解释为什么这样贪是对的

时间复杂度

  • 排序:O(n log n)
  • 双指针遍历:O(n)

整体时间复杂度:

O(n log n)

空间复杂度

  • 排序需要额外空间(取决于语言实现)
  • 指针变量是常量级

空间复杂度:

O(1)(忽略排序带来的额外空间)

总结

LeetCode 455 是一道非常值得反复体会的贪心题

  • 思路简单
  • 逻辑清晰
  • 非常贴近真实世界的决策方式

如果你能把这道题讲清楚,说明你已经不只是“刷题”,而是在真正理解算法的决策逻辑

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 18:13:52

制造业知识传承难题破解:工人培训AI助手上线

制造业知识传承难题破解&#xff1a;工人培训AI助手上线 在一家中型机械制造厂的装配车间里&#xff0c;一位刚入职三个月的新员工正面对一台从未接触过的数控机床。他记得师傅提过某个参数设置的关键点&#xff0c;但翻遍了厚厚的操作手册和班组微信群记录&#xff0c;依然找不…

作者头像 李华
网站建设 2026/2/10 17:29:02

SBC运行Linux RT系统的实时性优化指南

SBC运行Linux RT系统的实时性优化实战指南你有没有遇到过这样的场景&#xff1a;在一台树莓派上跑着控制电机的程序&#xff0c;明明代码逻辑清晰、周期设定精准&#xff0c;可实际执行时却总出现几毫秒甚至十几毫秒的抖动&#xff1f;机器人动作不连贯、传感器采样失步、Ether…

作者头像 李华
网站建设 2026/1/30 14:41:31

anything-llm实战案例:某科技公司内部知识问答系统落地

Anything LLM实战案例&#xff1a;某科技公司内部知识问答系统落地 在一家快速发展的科技公司里&#xff0c;工程师每天要面对成百上千的技术文档、会议纪要和项目记录。每当有人问“订单服务的重试机制是怎么设计的&#xff1f;”——这个问题的答案可能藏在三年前某次架构评审…

作者头像 李华
网站建设 2026/2/2 22:58:50

Zynq-7000在Vivado中的SDK协同开发操作指南

Zynq-7000软硬件协同开发实战&#xff1a;从Vivado到SDK的完整闭环你有没有遇到过这样的情况&#xff1f;在Vivado里精心设计好了一个FPGA逻辑模块&#xff0c;信心满满地导出到SDK准备写控制程序&#xff0c;结果发现GPIO不响应、寄存器读不到值&#xff0c;甚至系统直接卡死……

作者头像 李华
网站建设 2026/2/4 20:39:32

一文说清:半加器与全加器的区别与联系

从0到1&#xff1a;半加器与全加器的底层逻辑与工程实践你有没有想过&#xff0c;计算机是如何做加法的&#xff1f;不是用计算器&#xff0c;也不是调用a b这么简单——而是从最基础的晶体管和门电路开始&#xff0c;一步步构建出能够完成二进制相加的硬件模块。这背后的第一…

作者头像 李华
网站建设 2026/2/7 6:53:55

如何监控anything-llm的使用情况与资源消耗?

如何监控 anything-LLM 的使用情况与资源消耗&#xff1f; 在企业级 AI 应用逐渐从“能跑起来”迈向“可运维、可治理”的今天&#xff0c;一个常被忽视的问题浮出水面&#xff1a;我们如何真正了解自己的大模型系统在“做什么”&#xff1f;尤其是在部署了像 Anything-LLM 这类…

作者头像 李华