news 2026/5/16 18:17:04

LeetCode 458 - 可怜的小猪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 458 - 可怜的小猪


文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
      • 先搞清楚“一只猪有多少种状态”
      • 为什么是指数关系?
      • Swift 实现思路
      • 可运行 Swift Demo 代码
    • 示例测试及结果
    • 与实际场景结合
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

这道题乍一看是个“喂猪试毒”的奇怪问题,但本质其实是一个信息量 + 状态数的问题。你不是在算猪,而是在算:
在有限的时间里,一只猪最多能帮你区分多少种情况?

一旦想明白这一点,这题就会从“完全没思路”瞬间变成“哦,原来是这样”。

描述

题目给你一堆桶,外观完全一样,其中正好有一桶有毒
你手里有一些小猪,可以喂它们喝水,通过观察“死 / 活”来判断毒桶是哪一个。

但有几个非常关键的限制:

  • 猪喝完水后,要等minutesToDie分钟才能知道它会不会死
  • 在这段等待时间内,不能再喂
  • 总时间只有minutesToTest分钟
  • 一只猪在一次喂水中,可以喝任意多个桶
  • 目标是:用最少的猪,在规定时间内,100% 确定毒桶

乍一看像是实验设计题,但其实是一个离散数学 + 编码问题

题解答案

核心结论一句话:

如果一只猪在整个测试过程中可以产生states种不同结果,那么p只猪最多可以区分states^p个桶。

只要满足:

states^p >= buckets

最小的p,就是答案。

题解代码分析

先搞清楚“一只猪有多少种状态”

假设:

rounds = minutesToTest / minutesToDie

也就是说,你最多能喂rounds 次

那一只猪会有哪些可能结果?

  • 第 1 轮死
  • 第 2 轮死
  • 第 rounds 轮死
  • 一直没死(说明没喝到毒)

所以:

states = rounds + 1

这一点非常关键,也是整道题的“转折点”。

为什么是指数关系?

你可以把每一只猪当成一个“多进制位”。

  • 每只猪有states种状态
  • p只猪一共能表示states^p种不同组合
  • 每一种组合,对应一个桶

这其实和二进制编码一模一样,只不过这里不是 0/1,而是多状态。

Swift 实现思路

实现非常简单:

  1. 先算出states
  2. 从 0 开始,不断增加猪的数量
  3. 直到states^p >= buckets

可运行 Swift Demo 代码

importFoundationclassSolution{funcpoorPigs(_buckets:Int,_minutesToDie:Int,_minutesToTest:Int)->Int{// 能进行多少轮测试letrounds=minutesToTest/minutesToDie// 每只猪的状态数(在哪一轮死,或者一直活着)letstates=rounds+1varpigs=0varcapacity=1// 逐步增加猪的数量whilecapacity<buckets{pigs+=1capacity*=states}returnpigs}}

这段代码是完全可以直接跑的,没有任何花里胡哨的地方,逻辑和数学推导是一一对应的。

示例测试及结果

我们用题目里的几个例子跑一遍。

letsolution=Solution()print(solution.poorPigs(1000,15,60))// 5print(solution.poorPigs(4,15,15))// 2print(solution.poorPigs(4,15,30))// 2

输出结果:

5 2 2

和题目给出的结果完全一致。

与实际场景结合

这道题在现实中,其实非常像下面几类问题:

  • 分布式系统定位故障节点

    • 每一轮探测相当于一次健康检查
    • 每个节点返回的状态就是“猪的状态”
  • A/B 实验中的多轮用户行为分析

    • 不同轮次的行为组合,本质也是状态编码
  • 压缩测试资源

    • 用更少的“探针”,在有限轮次内覆盖更多可能性

本质都是一句话:
在资源有限的情况下,最大化信息量。

时间复杂度

O(p)

其中p是最终需要的猪的数量。

由于buckets <= 1000p最大也就 5~6,基本可以忽略。

空间复杂度

O(1)

只用了几个整数变量,没有额外的数据结构。

总结

这道题最容易卡人的地方,并不是代码,而是建模思路

一旦你意识到:

  • 猪不是“工具”,而是“多状态编码器”
  • 死亡轮次本身就是信息
  • 多只猪就是指数级组合

整道题会瞬间从“完全没头绪”,变成“非常优雅”。

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

通信原理篇---信噪比

核心比喻&#xff1a;在吵闹的KTV里听朋友说话 想象一下这个场景&#xff1a; 你和一个朋友在一个非常吵闹的KTV包间里。包厢里有人唱歌、摇骰子、大笑、音乐震天响。 你想听清朋友对你说的悄悄话。 1. 信噪比到底是什么&#xff1f; 信噪比 你想听的声音 与 你不想听的声音…

作者头像 李华
网站建设 2026/5/12 8:17:20

通信原理篇---信噪比计算公式

核心概念&#xff1a;信噪比就是一个“倍数”信噪比&#xff08;SNR&#xff09;的本质很简单&#xff1a; 信号比噪声“强多少倍”&#xff1f;这个“倍数”有两种主要表示方式&#xff1a;纯倍数形式&#xff08;线性尺度&#xff0c;就像数苹果&#xff09;对数形式&#xf…

作者头像 李华
网站建设 2026/5/12 9:33:32

【DDD架构理解】

领域驱动设计&#xff08;DDD&#xff09;架构详解 一、核心概念 领域驱动设计&#xff08;Domain-Driven Design&#xff09;是一种以领域模型为中心的软件设计方法&#xff0c;通过通用语言&#xff08;Ubiquitous Language&#xff09;统一业务与技术术语&#xff0c;将复…

作者头像 李华
网站建设 2026/5/16 17:42:43

【毕业设计】基于springboot的音乐周边产品乐器售卖系统设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/11 9:01:31

近视,阻断了多少人的梦想?影响了多少人的生活?

在现代社会&#xff0c;近视早已不是陌生的眼部问题&#xff0c;它以悄然蔓延的态势&#xff0c;成为了许多人成长路上的一道坎。这道坎&#xff0c;不仅模糊了眼前的世界&#xff0c;更在无形中阻断了无数人奔赴梦想的脚步&#xff0c;也为日常生活埋下了诸多不便的伏笔。近视…

作者头像 李华
网站建设 2026/5/9 23:14:02

环境微振动控制至关重要

一、微振动对精密制造的影响机制 在现代精密制造领域&#xff0c;环境微振动已成为制约工艺精度的关键因素。特别是在半导体制造、精密测量等高端产业中&#xff0c;设备对工作环境稳定性的要求已达到前所未有的高度。振动对制造过程的影响主要体现在三个方面&#xff1a;首先&…

作者头像 李华