LeetCode每日一题4.20

781.森林中的兔子

问题

问题分析

根据题目描述,我们需要解决的问题是:给定一个数组 answers,其中每个元素表示某只兔子回答的"还有多少只兔子与你颜色相同",要求返回森林中兔子的最少数目。

思路

理解 answers 数组:

answers[i] = x 表示第 i 只兔子回答说还有 x 只兔子与它的颜色相同。

因此,每种颜色的兔子数量为 x + 1(包括它自己)。

统计每种回答的频率:

使用一个字典来统计每种回答(即 x)出现的次数。

计算每种颜色的兔子数量:

对于每种回答 x,如果其出现次数为 freq,则该颜色的兔子数量为 k * (x + 1),其中 k 是使得 k * (x + 1) >= freq 的最小整数。

汇总所有颜色的兔子数量:

将每种颜色的兔子数量相加,得到总数。

代码

python 复制代码
class Solution:
    def numRabbits(self, answers: List[int]) -> int:
        # 统计每种回答的频率
        count = Counter(answers)

        total_rabbits = 0
        for answer, freq in count.items():
            # 每种颜色的兔子数量为 (answer + 1)
            rabbits_per_color = answer + 1
            # 需要的颜色组数
            color_groups = (freq + rabbits_per_color - 1) // rabbits_per_color
            # 该颜色的兔子总数
            total_rabbits += color_groups * rabbits_per_color

        return total_rabbits

复杂度分析

时间复杂度:O(n)(其中 n 是 answers 的长度)

空间复杂度:O(m)(其中 m 是 answers 中不同元素的数量)

学习

导入必要的模块:

Counter 用于统计 answers 中每个元素的频率。

定义 Solution 类和 numRabbits 方法:

numRabbits 方法接收一个列表 answers 作为参数。

统计每种回答的频率:

使用 Counter(answers) 得到每个回答的频率。

计算总兔子数:

遍历 count 字典,对于每种回答 answer 和其频率 freq:

计算每种颜色的兔子数量 rabbits_per_color = answer + 1。

计算需要的颜色组数 color_groups = (freq + rabbits_per_color - 1) // rabbits_per_color。

累加该颜色的兔子总数 total_rabbits += color_groups * rabbits_per_color。

返回结果:

最终返回 total_rabbits 作为结果。

python 复制代码
color_groups = (freq + rabbits_per_color - 1) // rabbits_per_color

这行代码的目的是计算对于特定的 answer(即特定的 rabbits_per_color),需要多少组这样的兔子来覆盖所有的 freq 只兔子。

示例:

示例 1:answers = [1, 1, 2]

answer = 1 时,freq = 2(有两个 1),rabbits_per_color = 2。

color_groups = (2 + 2 - 1) // 2 = 3 // 2 = 1,即需要 1 组 2 只兔子。

answer = 2 时,freq = 1(有一个 2),rabbits_per_color = 3。

color_groups = (1 + 3 - 1) // 3 = 3 // 3 = 1,即需要 1 组 3 只兔子。

示例 2:answers = [10, 10, 10]

answer = 10 时,freq = 3(有三个 10),rabbits_per_color = 11。

color_groups = (3 + 11 - 1) // 11 = 13 // 11 = 1,即需要 1 组 11 只兔子。

  1. total_rabbits += color_groups * rabbits_per_color

最后,将每种颜色组的兔子数量累加到 total_rabbits 中,得到最终的兔子总数。

相关推荐
我不是QI2 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥2 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
明月(Alioo)3 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树3 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
lingran__3 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech20253 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn
小冯记录编程4 小时前
深入解析C++ for循环原理
开发语言·c++·算法
chenchihwen5 小时前
深度解析RAG系统中的PDF解析模块:Docling集成与并行处理实践
python·算法·pdf
做科研的周师兄7 小时前
【机器学习入门】7.4 随机森林:一文吃透随机森林——从原理到核心特点
人工智能·学习·算法·随机森林·机器学习·支持向量机·数据挖掘
Sunsets_Red7 小时前
差分操作正确性证明
java·c语言·c++·python·算法·c#