力扣每日打卡16 781. 森林中的兔子(中等)

力扣 781. 森林中的兔子 中等

  • 前言
  • 一、题目内容
  • 二、解题方法
    • 1. 哈希函数(来自评论区大佬的解题方法)
    • 2.官方题解
      • 2.1 方法一:贪心


前言

这是刷算法题的第十六天,用到的语言是JS
题目:力扣 781. 森林中的兔子 (中等)


一、题目内容

森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你(指被提问的兔子)颜色相同?” ,将答案收集到一个整数数组 a n s w e r s answers answers 中,其中 a n s w e r s [ i ] answers[i] answers[i] 是第 i i i 只兔子的回答。

给你数组 a n s w e r s answers answers ,返回森林中兔子的最少数量。

示例 1:

输入:answers = [1,1,2]
输出:5
解释:
两只回答了 “1” 的兔子可能有相同的颜色,设为红色。
之后回答了 “2” 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 “2” 的兔子为蓝色。
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
因此森林中兔子的最少数量是 5 只:3 只回答的和 2 只没有回答的。
示例 2:

输入:answers = [10,10,10]
输出:11

提示:

1 < = a n s w e r s . l e n g t h < = 1000 1 <= answers.length <= 1000 1<=answers.length<=1000
0 < = a n s w e r s [ i ] < 1000 0 <= answers[i] < 1000 0<=answers[i]<1000

二、解题方法

1. 哈希函数(来自评论区大佬的解题方法)

挺好想的吧,第i个兔子回答有x个相同的亲兄弟,加上它自己,这种兔子至少有x + 1个,当第j个兔子也回答有x个亲兄弟时,其实就两种情况:

  1. 第j个兔子和第i个兔子同属一个阵营,它们互为亲兄弟
  2. 第j个兔子和第i个兔子不属于同一个阵营,它们不是亲兄弟

下面具体分析:
当有兔子回答x时,一定存在一个最多容纳x+1个兔子的兔子阵营,且同属于一个阵营的兔子的回答都是一样的,都是x,因此我们记录有多少只兔子回答了x,即mp[x] = y就表示有y只兔子回答了 x
解释为:一个最多容纳x+1只兔子的兔子阵营,找到了y只兔子在这个阵营中,y == 1表示这个阵营第一次出现,而当y == x + 1时表示这个阵营已经满了,后续还有兔子回答x时已经是另一个新阵营的兔子了,咱们只在y == 1时收集答案,即只出现新阵营时才收集答案,这样就避免了重复计算了和漏计算

代码如下(示例):

/*** @param {number[]} answers* @return {number}*/
var numRabbits = function (answers) {// 哈希表?let count = 0const map = new Map()for (const x of answers) {// 记录当前答案出现的次数, 一开始是0,首次添加时为1map.set(x, (map.get(x) || 0) + 1)if (map.get(x) > x + 1) map.set(x, 1) // 产生了新的颜色阵营if (map.get(x) === 1) count += x + 1 // 出现新阵营 或者 答案次数只有1的话,就加上阵营的兔子数量// 补充,为什么两个if调换顺序就出问题// 调换后,错误的新增计数: // 假设某个颜色(兔子回答) x 的出现次数当前为 x + 1,而这时有另一个兔子也说 x。因为我们先检查了 map.get(x) === 1,会在这个时候错误地将这个阵营的数量加到 count 中,即使它实际上应该被标记为已满。// 没有正确重置计数:// 如果没有首先检查是否超过最大次数(x + 1),那么我们就无法及时重置计数为 1,而是错误地累加到现有计数基础上,这会导致最终的计数不准确,增加了不该计数的兔子。}return count
}

2.官方题解

2.1 方法一:贪心

cv

代码如下(示例):

var numRabbits = function(answers) {const count = new Map();for (const y of answers) {count.set(y, (count.get(y) || 0) + 1);}let ans = 0;for (const [y, x] of count.entries()) {ans += Math.floor((x + y) / (y + 1)) * (y + 1);}return ans;
};作者:力扣官方题解
链接:https://leetcode.cn/problems/rabbits-in-forest/solutions/698444/sen-lin-zhong-de-tu-zi-by-leetcode-solut-kvla/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析:
时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 a n s w e r s answers answers 的长度。
空间复杂度: O ( n ) O(n) O(n)。最坏情况下,哈希表中含有 n n n 个元素。

链接:力扣本题官方题解
来源:力扣(LeetCode)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的线性预测:创新应用与挑战

一、引言 1.1 研究背景 深度学习作为人工智能领域的重要分支&#xff0c;近年来在各个领域都取得了显著的进展。在线性预测领域&#xff0c;深度学习也逐渐兴起并展现出强大的潜力。传统的线性预测方法在处理复杂数据和动态变化的情况时往往存在一定的局限性。而深度学习凭借…

黑马点评redis改 part 3

优惠券秒杀 全局唯一id 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a;实际开发中数据库ID一般不会参与业务逻辑 增加一个订单号字段就好…

低代码开发平台:企业数字化转型的加速器

一、引言 在数字化时代&#xff0c;企业的转型需求日益迫切。为了在激烈的市场竞争中保持领先地位&#xff0c;企业需要快速响应市场变化、优化业务流程、提升运营效率。然而&#xff0c;传统的软件开发模式往往面临开发周期长、成本高、灵活性差等问题&#xff0c;难以满足企业…

个人所得税

文章目录 一、名词解释二、个人所得税计算方法 (举例)1.累计预扣预缴应纳税所得额、本期应预扣预缴税额2.个人所得税预扣率表一3.个人所得税计算举例 三、专项附加扣除政策介绍四、年度汇算清缴政策介绍五、常见问答 一、名词解释 累计预扣法是指扣缴义务人在一个纳税年度内预…

二进制和docker两种方式部署Apache pulsar(standalone)

#作者&#xff1a;闫乾苓 文章目录 1、二进制安装部署Pulsar(standalone)1.1 安装配置JDK1.2 下载解压pulsar安装包1.3 启动独立模式的Pulsar 集群1.4 创建主题测试1.5 向主题写入消息测试1.6 从主题中读取消息测试 2.docker安装部署Pulsar(standalone)2.1 使用docker 启动Pul…

如何在 Go 中创建和部署 AWS Lambda 函数

AWS Lambda 是一个无服务器计算平台&#xff0c;您可以使用自己喜欢的编程语言编写代码&#xff0c;无需担心设置虚拟机。 您只需为 Lambda 函数的调用次数和运行时间&#xff08;毫秒&#xff09;付费。 我们大多数人都了解 JavaScript 和 Python&#xff0c;但它们的内存效率…

STM32配置系统时钟

1、STM32配置系统时钟的步骤 1、系统时钟配置步骤 先配置系统时钟&#xff0c;后面的总线才能使用时钟频率 2、外设时钟使能和失能 STM32为了低功耗&#xff0c;一开始是关闭了所有的外设的时钟&#xff0c;所以外设想要工作&#xff0c;首先就要打开时钟&#xff0c;所以后面…

[安全实战]逆向工程核心名词详解

逆向工程核心名词详解 一、调试与执行类 1. 断点&#xff08;Breakpoint&#xff09; 定义&#xff1a;在代码中设置标记&#xff0c;使程序执行到此处时暂停类型&#xff1a; 普通断点&#xff1a;通过INT3指令实现条件断点&#xff1a;满足特定条件时触发内存断点&#xf…

Mac mini 安装mysql数据库以及出现的一些问题的解决方案

首先先去官网安装一下mysql数据库&#xff0c;基本上都是傻瓜式安装的流程&#xff0c;我也就不详细说了。 接下来就是最新版的mysql安装的时候&#xff0c;他就会直接让你设置一个新的密码。 打开设置&#xff0c;拉到最下面就会看到一个mysql的图标&#xff1a; 我设置的就是…

聚宽策略----国九条后中小板微盘小改,年化135.40%

最近在研究的聚宽策略&#xff0c;一般技术分析的我直接转qmt了&#xff0c;财务因子有一点麻烦&#xff0c;我直接利用我开发强大的服务器系统&#xff0c;直接读取信号&#xff0c;最近在优化一下系统&#xff0c;最近在开发对接bigquant的交易系统&#xff0c;完成了api数据…

C语言状态字与库函数详解:概念辨析与应用实践

C语言状态字与库函数详解&#xff1a;概念辨析与应用实践 一、状态字与库函数的核心概念区分 在C语言系统编程中&#xff0c;"状态字"和"库函数"是两个经常被混淆但本质完全不同的概念&#xff0c;理解它们的区别是掌握系统编程的基础。 1. 状态字&…

End-to-End从混沌到秩序:基于LLM的Pipeline将非结构化数据转化为知识图谱

摘要:本文介绍了一种将非结构化数据转换为知识图谱的端到端方法。通过使用大型语言模型(LLM)和一系列数据处理技术,我们能够从原始文本中自动提取结构化的知识。这一过程包括文本分块、LLM 提示设计、三元组提取、归一化与去重,最终利用 NetworkX 和 ipycytoscape 构建并可…

Leetcode 3523. Make Array Non-decreasing

Leetcode 3523. Make Array Non-decreasing 1. 解题思路2. 代码实现 题目链接&#xff1a;3523. Make Array Non-decreasing 1. 解题思路 这一题思路上来说就是一个栈的问题&#xff0c;就是从后往前依次考察每一个元素&#xff0c;显然&#xff0c;当前位置要么被舍弃&…

探秘STM32如何成为现代科技的隐形引擎

STM32单片机原理与应用 前言&#xff1a;微型计算机的硅脑 在我们身边的每一个智能设备中&#xff0c;都隐藏着一个小小的"硅脑"——单片机。它们体积微小&#xff0c;却能执行复杂的运算和控制功能&#xff0c;就像是现代科技世界的"神经元"。STM32系列…

机制的作用

“机制”是一个广泛使用的概念&#xff0c;其含义和应用范围因领域而异。在不同的学科和实际应用中&#xff0c;机制有着不同的定义和功能。以下从几个主要领域对“机制”进行详细解释&#xff1a; 一、自然科学中的机制 &#xff08;一&#xff09;物理学 定义 在物理学中&…

prim最小生成树+最大生成树【C++】板子题

什么是最小生成树&#xff1f; 在一给定的无向图G (V, E) 中&#xff0c;(u, v) 代表连接顶点 u 与顶点 v 的边&#xff0c;而 w(u, v) 代表此的边权重&#xff0c;若存在 T 为 E 的子集&#xff08;即&#xff09;且为无循环图&#xff0c;使得的 w(T) 最小&#xff0c;则此 …

读书笔记--MySQL索引

索引(在 MySQL 中也叫做“键(key)”)是存储引擎用于快速找到记录的一种数据结构。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时&#xff0c;索引对性能的影响愈发重要。在数据量较小且负载较低时&#xff0c;不恰当的索引对性能的影响可能还不明显&#xff0c…

VS Code 远程连接服务器:Anaconda 环境与 Python/Jupyter 运行全指南。研0大模型学习(第六、第七天)

VS Code 远程连接服务器&#xff1a;Anaconda 环境与 Python/Jupyter 运行全指南 在使用 VS Code 通过 SSH 远程连接到服务器进行开发时&#xff0c;尤其是在进行深度学习等需要特定环境的工作时&#xff0c;正确配置和使用 Anaconda 环境以及理解不同的代码运行方式非常关键。…

字节头条golang二面

docker和云服务的区别 首先明确Docker的核心功能是容器化&#xff0c;它通过容器技术将应用程序及其依赖项打包在一起&#xff0c;确保应用在不同环境中能够一致地运行。而云服务则是由第三方提供商通过互联网提供的计算资源&#xff0c;例如计算能力、存储、数据库等。云服务…

数据结构和算法(七)--树

一、树 树是我们计算机中非常重要的一种数据结构&#xff0c;同时使用树这种数据结构&#xff0c;可以描述现实生活中的很多事物&#xff0c;例如家谱、单位的组织架构、等等。 树是由n(n>1)个有限结点组成一个具有层次关系的集合。把它叫做"树"是因为它看起来像一…