news 2026/4/23 12:13:47

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/4/23 8:31:05

数字频率计输入放大整形电路实战案例

从微弱信号到精准计数&#xff1a;一文讲透数字频率计的“眼睛”如何看清世界你有没有遇到过这种情况——手里的信号明明是10MHz正弦波&#xff0c;可频率计就是“看走眼”&#xff0c;测出来跳动不止、误差几十kHz&#xff1f;问题往往不在于后面的算法多牛&#xff0c;而在于…

作者头像 李华
网站建设 2026/4/23 8:32:46

K8S-EFK日志收

部署EFK1、创建nfs存储访问启动master节点的nfs服务创建/data/v1kubectl create -f serviceaccount.yaml ​ kubectl create -f rbac.yaml修改deployment.yaml文件NFS SERVER #存储地址 ​ kubectl create -f deployment.yaml ​ kubectl create -f class.yaml2、构建es集群kub…

作者头像 李华
网站建设 2026/4/23 8:31:18

字体大小调节与可访问性改进方案

字体大小调节与可访问性改进方案 在智能知识系统日益普及的今天&#xff0c;一个看似微小的设计细节——字体能否自由调整——往往决定了产品是真正“以人为本”&#xff0c;还是仅仅停留在功能堆砌的层面。尤其对于像 anything-LLM 这样集成了RAG引擎、支持多格式文档上传与自…

作者头像 李华
网站建设 2026/4/23 8:35:44

基于CMOS的一位全加器结构分析:专业级解读

一位全加器的CMOS电路设计深度解析&#xff1a;从逻辑到晶体管在数字系统的世界里&#xff0c;最基础的操作往往蕴藏着最深刻的工程智慧。加法——这个我们从小学就开始掌握的运算&#xff0c;在芯片内部却是一场由数十个微小晶体管协同完成的精密舞蹈。而这场舞蹈的核心角色之…

作者头像 李华
网站建设 2026/4/23 8:32:42

开源AI应用推荐:anything-llm让知识管理更简单

开源AI应用推荐&#xff1a;anything-llm让知识管理更简单 在企业文档堆积如山、员工总在重复查找同一份报销政策的今天&#xff0c;有没有一种方式能让知识“主动说话”&#xff1f;想象一下&#xff1a;你只需问一句“去年Q3项目审批要走哪些流程”&#xff0c;系统立刻给出…

作者头像 李华
网站建设 2026/4/23 11:19:00

避免重复上传:文件去重机制在anything-llm中的实现

避免重复上传&#xff1a;文件去重机制在 anything-llm 中的实现 在构建基于私有文档的智能问答系统时&#xff0c;一个看似微小却影响深远的问题逐渐浮出水面&#xff1a;用户反复上传“几乎一样”的文件。可能是同一份PDF被不同命名多次提交&#xff0c;也可能是Word转成PDF后…

作者头像 李华