当前位置: 首页 > news >正文

LeetCode781 森林中的兔子

问题描述

在一片神秘的森林里,住着许多兔子,但是我们并不知道兔子的具体数量。现在,我们对其中若干只兔子进行提问,问题是 “还有多少只兔子与你(指被提问的兔子)颜色相同?” 我们将每只兔子的回答收集起来,存放在一个整数数组 answers 中,其中 answers[i] 表示第 i 只兔子的回答。我们的任务是根据这个数组,计算出森林中兔子的最少数量。

示例分析

假设 answers = [1, 1, 2]

  • 有两只兔子回答 “1”,这意味着它们认为还有 1 只兔子和自己颜色相同,所以这两只兔子很可能是同一种颜色,这种颜色的兔子总数为 1 + 1 = 2 只。
  • 有一只兔子回答 “2”,它表示还有 2 只兔子和自己颜色相同,那么这种颜色的兔子总数为 2 + 1 = 3 只。
  • 综合起来,森林中兔子的最少数量就是 2 + 3 = 5 只。

解题思路

为了计算森林中兔子的最少数量,我们可以根据兔子的回答来分析。如果一只兔子回答有 k 只兔子和它颜色相同,那么包括这只兔子在内,同颜色的兔子一共有 k + 1 只。

我们可以使用哈希表(在 C 语言中可以用数组模拟)来统计每种回答出现的次数。对于每种回答 k,如果有 n 只兔子都回答 k,那么至少有 (n + k) / (k + 1) 种不同颜色的兔子群体,每种群体有 k + 1 只兔子。

代码实现

#include <stdio.h>
#include <stdlib.h>#define MAX_ANSWER 1000int numRabbits(int* answers, int answersSize) {int count[MAX_ANSWER + 1] = {0};// 统计每种回答出现的次数for (int i = 0; i < answersSize; i++) {count[answers[i]]++;}int total = 0;// 计算每种颜色的兔子数量for (int i = 0; i <= MAX_ANSWER; i++) {if (count[i] > 0) {// 计算这种颜色的兔子数量int x = i;int cnt = count[i];// 每 (x + 1) 只兔子为一组int groups = (cnt + x) / (x + 1);total += groups * (x + 1);}}return total;
}int main() {int answers[] = {1, 1, 2};int answersSize = sizeof(answers) / sizeof(answers[0]);int result = numRabbits(answers, answersSize);printf("Minimum number of rabbits: %d\n", result); return 0;
}

代码详细解释

1. 头文件与宏定义

#include <stdio.h>
#include <stdlib.h>#define MAX_ANSWER 1000
  • #include <stdio.h>:引入标准输入输出库,用于后续的 printf 函数输出结果。
  • #include <stdlib.h>:引入标准库,这里虽然代码中未直接使用库中的函数,但在更复杂的应用场景下可能会用到,提前引入作为储备。
  • #define MAX_ANSWER 1000:定义一个宏 MAX_ANSWER,表示兔子回答的最大可能值。这有助于后续代码中数组的创建和遍历范围的确定。

2. numRabbits 函数

int numRabbits(int* answers, int answersSize) {int count[MAX_ANSWER + 1] = {0};// 统计每种回答出现的次数for (int i = 0; i < answersSize; i++) {count[answers[i]]++;}int total = 0;// 计算每种颜色的兔子数量for (int i = 0; i <= MAX_ANSWER; i++) {if (count[i] > 0) {// 计算这种颜色的兔子数量int x = i;int cnt = count[i];// 每 (x + 1) 只兔子为一组int groups = (cnt + x) / (x + 1);total += groups * (x + 1);}}return total;
}
  • int count[MAX_ANSWER + 1] = {0};:创建一个长度为 MAX_ANSWER + 1 的数组 count,用于统计每种回答出现的次数,初始值都设为 0。
  • 第一个 for 循环:遍历 answers 数组,对于每个回答 answers[i],将 count[answers[i]] 的值加 1,从而统计出每种回答出现的次数。
  • int total = 0;:初始化一个变量 total,用于存储最终计算出的兔子最少总数。
  • 第二个 for 循环:遍历 count 数组,当 count[i] > 0 时,说明有兔子给出了回答 i
    • int x = i;int cnt = count[i];:将 i 赋值给 x,将 count[i] 赋值给 cnt,方便后续计算。
    • int groups = (cnt + x) / (x + 1);:计算至少有多少组颜色相同的兔子群体。
    • total += groups * (x + 1);:将每组兔子的数量乘以组数,累加到 total 中。

3. main 函数

int main() {int answers[] = {1, 1, 2};int answersSize = sizeof(answers) / sizeof(answers[0]);int result = numRabbits(answers, answersSize);printf("Minimum number of rabbits: %d\n", result); return 0;
}
  • 定义一个示例数组 answers,并计算其长度 answersSize
  • 调用 numRabbits 函数计算兔子的最少数量,将结果存储在 result 中。
  • 使用 printf 函数输出结果。

复杂度分析

  • 时间复杂度:代码中有两个主要的 for 循环。第一个循环遍历 answers 数组,时间复杂度为 O(n),其中 n 是 answers 数组的长度。第二个循环遍历 count 数组,由于 count 数组的长度是固定的(由 MAX_ANSWER 决定),可以看作一个常数,所以这个循环的时间复杂度为O(1)。综合起来,总的时间复杂度为 O(n)。
  • 空间复杂度:使用了一个长度为 MAX_ANSWER + 1 的数组 count 来统计回答次数,由于 MAX_ANSWER 是一个常数,所以空间复杂度为 O(1)。

相关文章:

LeetCode781 森林中的兔子

问题描述 在一片神秘的森林里&#xff0c;住着许多兔子&#xff0c;但是我们并不知道兔子的具体数量。现在&#xff0c;我们对其中若干只兔子进行提问&#xff0c;问题是 “还有多少只兔子与你&#xff08;指被提问的兔子&#xff09;颜色相同&#xff1f;” 我们将每只兔子的…...

单硬盘槽笔记本更换硬盘

背景 本人的笔记本电脑只有一个硬盘槽&#xff0c;而且没有M.2的硬盘盒&#xff0c;只有一个移动硬盘 旧硬盘&#xff1a;512G 新硬盘&#xff1a;1T 移动硬盘&#xff1a;512G 参考链接&#xff1a;https://www.bilibili.com/video/BV1iP41187SW/?spm_id_from333.1007.t…...

EB生成配置的过程

EB Tresos Studio,简称EB,通过图形化的模式进行配置生成,并根据选项配置生成配置代码,即 MCAL 层各个模块的配置参数。 在 MCAL 代码中,分为静态代码和配置代码。静态代码,就是 AUTOSAR 规范内容,包含对硬件的封装以及标准化接口的封装;配置代码一般用于配置初始化结构…...

量化交易数据获取:xtquant库的高效应用

量化交易数据获取&#xff1a;xtquant库的高效应用 在量化交易领域&#xff0c;历史行情数据的重要性不言而喻。它不仅为策略回测提供基础&#xff0c;也是实时交易决策的重要参考。本文将介绍如何使用xtquant库来高效获取和处理历史行情数据。 技术背景与应用场景 对于量化…...

哨兵模式与 Redis Cluster:高可用 Redis 的深度剖析

深入探讨 Redis 高可用性解决方案&#xff1a;哨兵模式与 Redis Cluster 一、哨兵模式&#xff08;Redis Sentinel&#xff09;深入解析 &#xff08;一&#xff09;工作原理详解 哨兵模式通过一个或多个哨兵实例监控 Redis 主从复制集群&#xff0c;确保在主节点发生故障时…...

C++20新特性

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;包括模块&#xff08;Modules&#xff09;、协程…...

电机实验曲线数据提取

处理Python 代码供参考: 1、曲线数据还原 import cv2 import numpy as np import matplotlib.pyplot as plt# 读取图像 image_path 1.png image cv2.imread(image_path) image_copy image.copy() # 创建图像副本&#xff0c;用于叠加显示# 转换为灰度图像 gray cv2.cvtCo…...

windows蓝牙驱动开发-调试及支持的HCI和事件

调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时&#xff0c;可以使用驱动程序验证程序来协助其调试。 若要启用验证检查&#xff0c;必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作&#xff0c;将禁用验证检查。 若要完全利用验证检查&#xff0c;请确保…...

Excel大数据量导入导出

github源码 地址&#xff08;更详细&#xff09; : https://github.com/alibaba/easyexcel 文档&#xff1a;读Excel&#xff08;文档已经迁移&#xff09; B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…...

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …...

Qt修仙之路2-1 仿QQ登入 法宝初成

widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…...

DeepSeek-V3 论文解读:大语言模型领域的创新先锋与性能强者

论文链接&#xff1a;DeepSeek-V3 Technical Report 目录 一、引言二、模型架构&#xff1a;创新驱动性能提升&#xff08;一&#xff09;基本架构&#xff08;Basic Architecture&#xff09;&#xff08;二&#xff09;多令牌预测&#xff08;Multi-Token Prediction&#xf…...

配置#include “nlohmann/json.hpp“,用于处理json文件

#include “nlohmann/json.hpp” // 需要安装 nlohmann/json.hpp 头文件 using json = nlohmann::json; 下载链接:https://github.com/nlohmann/json/tree/develop 1.下载并解压:首先,需要从nlohmann/json的GitHub仓库下载源代码,并解压得到的文件。 地址: nlohmann/json…...

索引失效的14种常见场景

在 MySQL 中&#xff0c;索引有时可能会失效&#xff0c;导致查询性能下降。以下是常见的 14 种场景&#xff0c;在这些场景下&#xff0c;索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时&#xff0c;如果 OR 连接的多个条件中有一个没有使用索引&#xff0…...

解决com.kingbase8.util.KSQLException: This _connection has been closed.

问题描述 一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend.java.net.SocketTime…...

openAI官方prompt技巧(二)

1. 赋予 ChatGPT 角色 为 ChatGPT 指定一个角色&#xff0c;让其从特定的身份或视角回答问题。这有助于生成针对特定受众或场景的定制化回答。 例如&#xff1a; 你是一名数据分析师&#xff0c;负责我们的市场营销团队。请总结上个季度的营销活动表现&#xff0c;并强调与未…...

【非 root 用户下全局使用静态编译的 FFmpeg】

在非 root 用户下全局使用静态编译的 FFmpeg&#xff0c;可以按照以下方法操作&#xff1a; 1. 下载静态编译的 FFmpeg 如果你还没有下载静态编译的 FFmpeg&#xff0c;可以从官方网站获取&#xff1a; wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd6…...

【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言 本文主要介绍我最近开发的一个个人实战项目&#xff0c;“基于深度学习的人脸门禁 IPC 智能安防监控系统”&#xff0c;全程满帧流畅运行。这个项目我目前全网搜了一圈&#xff0c;还没发现有相关类型的开源项目。这个项目只要稍微改进下&#xff0c;就可以变成市面上目前…...

前端布局与交互实现技巧

前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中&#xff0c;经常需要将某个元素居中显示。以下是一种常见的实现方式&#xff1a; HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…...

idea 找不到或者无法加载主类

idea项目&#xff0c;之前一直是正常运行的&#xff0c;放假了之后再回来就遇到启动不了的问题。 WebApplication这个类右键运行的时候&#xff0c;也提示找不到主类。 对于这种之前运行没有问题&#xff0c;突然出问题的项目。 我的点是没有改动代码和数据的情况下项目就跑不起…...

ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤

ModTheSpire终极指南&#xff1a;安全加载杀戮尖塔模组的5大步骤 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的Java游戏模组加载器&#xf…...

3分钟解决Windows热键冲突:Hotkey Detective终极免费方案

3分钟解决Windows热键冲突&#xff1a;Hotkey Detective终极免费方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否…...

如何用roop-unleashed实现零门槛AI换脸:三分钟制作专业级视频的完整指南

如何用roop-unleashed实现零门槛AI换脸&#xff1a;三分钟制作专业级视频的完整指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要制作令人惊艳的AI换…...

机器学习因果推断:SSRI与RI方法如何解决异质性效应估计的不确定性

1. 项目概述与核心挑战在实证研究的工具箱里&#xff0c;因果推断正变得越来越“智能”。我们不再满足于回答“这个药平均来看有没有效”&#xff0c;而是迫切想知道“这个药对张三、李四、王五分别有多大效果&#xff1f;”。这就是异质性处理效应估计的魅力所在&#xff0c;它…...

JMeter梯度压测:精准定位系统可扩展性边界

1. 为什么“梯度式压测”不是加个线程组就完事了&#xff1f;很多人第一次打开JMeter&#xff0c;照着教程建个线程组、加个HTTP请求、跑个聚合报告&#xff0c;看到TPS从200涨到800就以为“压测完成了”。结果上线后流量一上来&#xff0c;服务直接503&#xff0c;监控里CPU没…...

基于Petri网与机器学习的等离子体化学反应网络简化方法

1. 项目概述与核心挑战在等离子体化学和化学工程领域&#xff0c;我们常常面对一个令人头疼的难题&#xff1a;一个看似简单的物理过程&#xff0c;背后却隐藏着成百上千个相互耦合的化学反应。就拿低温等离子体合成氨&#xff08;NH₃&#xff09;这个经典案例来说&#xff0c…...

ZygiskFrida:安卓逆向的Zygote层动态插桩新范式

1. 这不是“又一个 Frida 模块”&#xff0c;而是安卓逆向工作流的物理层重构你有没有过这样的经历&#xff1a;在一台已 root 的测试机上&#xff0c;想用 Frida hook 一个刚启动的系统服务&#xff0c;结果发现frida-server启动失败&#xff0c;报错Permission denied&#x…...

用Python复现电池寿命预测论文:从数据清洗到模型调优的完整实战(附代码)

用Python实战电池寿命预测&#xff1a;从特征工程到模型优化的全流程解析在新能源与储能技术快速发展的今天&#xff0c;锂离子电池的健康状态&#xff08;SOH&#xff09;预测已成为工业界和学术界共同关注的核心课题。不同于传统实验室环境下耗时数月的电池老化测试&#xff…...

Rust异步编程实战:构建高性能并发应用

引言 异步编程是构建高性能后端服务的关键技术。作为从Python转向Rust的开发者&#xff0c;我发现Rust的异步模型与Python有很大不同。Rust的异步编程基于协程和事件驱动&#xff0c;通过Tokio运行时实现高效的并发执行。本文将深入探讨Rust异步编程的核心概念、实践模式和性能…...

2026年AI写作辅助平台实测排行,哪款真正适合一站式撰稿?

2026 年学术 AI 论文工具已形成全流程、理工 / 社科、英文 / 中文、免费 / 付费的清晰分化。综合实测排行与场景适配&#xff0c;千笔AI 是中文全能首选&#xff0c;DeepSeek 学术版是理工开源首选&#xff0c;毕业之家是国内毕业专属首选。 一、2026 年实测排行 TOP5&#xff…...