news 2026/4/20 7:33:23

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/19 0:34:57

AI和效率压力?现代数据中心的新技术解决方案

AI模型的训练与推理需要巨大的计算资源&#xff0c;这直接推高了能源消耗与冷却需求。当前&#xff0c;全球数据中心约占全球电力消耗的1%至2%&#xff0c;而高盛预计&#xff0c;到本十年末&#xff0c;这一比例可能上升至4%……AI时代的数据中心挑战随着人工智能的持续发展与…

作者头像 李华
网站建设 2026/4/18 16:36:59

医疗文档处理新思路:借助anything-llm实现病历问答

医疗文档处理新思路&#xff1a;借助 Anything-LLM 实现病历问答 在医院信息科的某个深夜&#xff0c;一位年轻医生正为第二天的疑难病例讨论做准备。他需要从过去三年的心内科出院记录中找出所有使用华法林且发生过轻微出血事件的老年患者——这项任务本该只需几分钟&#xff…

作者头像 李华
网站建设 2026/4/20 5:33:57

高校图书馆智能化升级:学生自助查询论文系统

高校图书馆智能化升级&#xff1a;学生自助查询论文系统 在高校科研节奏日益加快的今天&#xff0c;一个常见的场景是&#xff1a;研究生小张为了撰写文献综述&#xff0c;在图书馆数据库中输入关键词反复检索&#xff0c;却始终无法精准定位到所需的核心观点。他不得不下载十几…

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

Kgateway 实战指南:轻量级 Kubernetes 流量管理与生产落地

Kgateway 是一个面向未来、轻量高效的 Kubernetes 网关解决方案,本指南将从核心概念、特性优势、生产实践到对比分析全面解读 Kgateway。 一、什么是 Kgateway? Kgateway 是一个开源的 Kubernetes 入口网关和 API 网关,它的核心设计理念是 完全遵循 Kubernetes Gateway API…

作者头像 李华
网站建设 2026/4/17 20:24:07

image2lcd单色图像转换:超详细版处理流程解析

如何用 image2lcd 精准转换单色图像&#xff1f;一个嵌入式工程师的实战笔记 最近在做一个基于 STM32 的工业控制面板项目&#xff0c;客户坚持要用一块 128x64 的单色 OLED 屏显示 Logo 和状态图标。这本不是什么难事&#xff0c;但当我把设计好的 PNG 图标导入 image2lcd 工…

作者头像 李华
网站建设 2026/4/18 3:49:16

容器编排进阶:Kubernetes部署anything-llm实践

容器编排进阶&#xff1a;Kubernetes部署anything-llm实践 在大模型热潮席卷各行各业的今天&#xff0c;越来越多团队开始尝试将 LLM 能力落地到实际业务中——比如搭建内部知识库、构建智能客服系统。但真正动手时才发现&#xff0c;从“能跑”到“可用”&#xff0c;中间隔着…

作者头像 李华