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 森林中的兔子
问题描述 在一片神秘的森林里,住着许多兔子,但是我们并不知道兔子的具体数量。现在,我们对其中若干只兔子进行提问,问题是 “还有多少只兔子与你(指被提问的兔子)颜色相同?” 我们将每只兔子的…...
单硬盘槽笔记本更换硬盘
背景 本人的笔记本电脑只有一个硬盘槽,而且没有M.2的硬盘盒,只有一个移动硬盘 旧硬盘:512G 新硬盘:1T 移动硬盘:512G 参考链接:https://www.bilibili.com/video/BV1iP41187SW/?spm_id_from333.1007.t…...
EB生成配置的过程
EB Tresos Studio,简称EB,通过图形化的模式进行配置生成,并根据选项配置生成配置代码,即 MCAL 层各个模块的配置参数。 在 MCAL 代码中,分为静态代码和配置代码。静态代码,就是 AUTOSAR 规范内容,包含对硬件的封装以及标准化接口的封装;配置代码一般用于配置初始化结构…...
量化交易数据获取:xtquant库的高效应用
量化交易数据获取:xtquant库的高效应用 在量化交易领域,历史行情数据的重要性不言而喻。它不仅为策略回测提供基础,也是实时交易决策的重要参考。本文将介绍如何使用xtquant库来高效获取和处理历史行情数据。 技术背景与应用场景 对于量化…...
哨兵模式与 Redis Cluster:高可用 Redis 的深度剖析
深入探讨 Redis 高可用性解决方案:哨兵模式与 Redis Cluster 一、哨兵模式(Redis Sentinel)深入解析 (一)工作原理详解 哨兵模式通过一个或多个哨兵实例监控 Redis 主从复制集群,确保在主节点发生故障时…...
C++20新特性
作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本,引入了许多新特性和改进,包括模块(Modules)、协程…...
电机实验曲线数据提取
处理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() # 创建图像副本,用于叠加显示# 转换为灰度图像 gray cv2.cvtCo…...
windows蓝牙驱动开发-调试及支持的HCI和事件
调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时,可以使用驱动程序验证程序来协助其调试。 若要启用验证检查,必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作,将禁用验证检查。 若要完全利用验证检查,请确保…...
Excel大数据量导入导出
github源码 地址(更详细) : https://github.com/alibaba/easyexcel 文档:读Excel(文档已经迁移) B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…...
Linux系统命令无法使用(glib库相关问题)
1.背景描述 Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。 relocation error: /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 论文解读:大语言模型领域的创新先锋与性能强者
论文链接:DeepSeek-V3 Technical Report 目录 一、引言二、模型架构:创新驱动性能提升(一)基本架构(Basic Architecture)(二)多令牌预测(Multi-Token Prediction…...
配置#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 中,索引有时可能会失效,导致查询性能下降。以下是常见的 14 种场景,在这些场景下,索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时,如果 OR 连接的多个条件中有一个没有使用索引࿰…...
解决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 指定一个角色,让其从特定的身份或视角回答问题。这有助于生成针对特定受众或场景的定制化回答。 例如: 你是一名数据分析师,负责我们的市场营销团队。请总结上个季度的营销活动表现,并强调与未…...
【非 root 用户下全局使用静态编译的 FFmpeg】
在非 root 用户下全局使用静态编译的 FFmpeg,可以按照以下方法操作: 1. 下载静态编译的 FFmpeg 如果你还没有下载静态编译的 FFmpeg,可以从官方网站获取: wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd6…...
【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
前言 本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁 IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前…...
前端布局与交互实现技巧
前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中,经常需要将某个元素居中显示。以下是一种常见的实现方式: HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…...
idea 找不到或者无法加载主类
idea项目,之前一直是正常运行的,放假了之后再回来就遇到启动不了的问题。 WebApplication这个类右键运行的时候,也提示找不到主类。 对于这种之前运行没有问题,突然出问题的项目。 我的点是没有改动代码和数据的情况下项目就跑不起…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
