LeetCode781森林中的兔子题解
森林中的兔子
森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers
数组里。
返回森林中兔子的最少数量。
示例:
输入: answers = [1, 1, 2]
输出: 5
解释:
两只回答了 “1” 的兔子可能有相同的颜色,设为红色。
之后回答了 “2” 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 “2” 的兔子为蓝色。
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。
输入: answers = [10, 10, 10]
输出: 11
输入: answers = []
输出: 0
解法一:贪心算法
两只相同颜色的兔子看到的其他同色兔子数必然是相同的。反之,若两只兔子看到的其他同色兔子数不同,那么这两只兔子颜色也不同。
将answers 中值相同的元素分为一组,对于每一组,计算出兔子的最少数量,然后将所有组的计算结果累加,就是最终的答案。
一般地,如果有 x 只兔子都回答 y,则至少有[x/(y+1)] 种不同的颜色,且每种颜色有y+1 只兔子,因此兔子数至少为[x/(y+1)]*(y+1)
我们可以用哈希表统计answers 中各个元素的出现次数,对每个元素套用上述公式计算,并将计算结果累加,即为最终答案。
class Solution {public int numRabbits(int[] answers) {Map<Integer, Integer> count = new HashMap<Integer, Integer>();for (int y : answers) {count.put(y, count.getOrDefault(y, 0) + 1);}int ans = 0;for (Map.Entry<Integer, Integer> entry : count.entrySet()) {int y = entry.getKey(), x = entry.getValue();ans += (x + y) / (y + 1) * (y + 1);}return ans;}
}
复杂度分析:
时间复杂度:O(n),其中 n 是数组answers
的长度。
空间复杂度:O(n)。最坏情况下,哈希表中含有 n 个元素。
LeetCode781森林中的兔子题解相关推荐
- [Swift]LeetCode781. 森林中的兔子 | Rabbits in Forest
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Leetcode--781.森林中的兔子
森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最少数量. 示例: 输入: answers ...
- 森林中的兔子(超详细解析)
森林中的兔子题目题解 题目 解析 题解一 题解二 题目 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返 ...
- 森林中的兔子,有感而抒
力扣4月4日每日一题,传送门 有感而抒 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最 ...
- leetcode 781. 森林中的兔子(hashmap)
森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最少数量. 示例: 输入: answers ...
- LeetCode 781. 森林中的兔子(哈希+贪心)
文章目录 1. 题目 2. 解题 1. 题目 森林中,每个兔子都有颜色. 其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色. 我们将这些回答放在 answers 数组里. 返回森林 ...
- leetcode每日一题—781.森林中的兔子
题目: 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里.返回森林中兔子的最少数量. 解答: class So ...
- leetcode 781. Rabbits in Forest | 781. 森林中的兔子(Java)
题目 https://leetcode.com/problems/rabbits-in-forest/ 题解 另 answers 中的每一个元素称为 n,那么,n 最多能抵消 n+1 个同类元素. c ...
- 科研文献|根相关真菌群落反映了亚热带森林中宿主的空间共生模式
TITLE:Root-associated fungal community reflects host spatial co-occurrence patterns in a subtropical ...
- R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数
R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录
最新文章
- Varnish3.0中文入门教程-应用篇2
- 多线程实现的二种方式
- shell对文本进行操作命令
- 项目经理之项目经理的基本特征
- 【Python】Python的类和对象(长文系列第⑤篇)
- 使用nodejs创建Marketing Cloud的contact数据
- oracle vertica性能对比,测试Vertica性能
- git 几种还原版本_Git恢复之前版本的两种方法reset、revert(图文详解)
- 管理实践-教练技术的应用
- 日期setMinutes()方法以及JavaScript中的示例
- Elasticsearch合并高亮字段
- internet download manager补丁_NS《古树旋律》推出免费追加乐曲补丁 含五首新曲!...
- StackOverflow
- python基于神经机器翻译技术的翻译网站实现
- Python自学的好方法
- 儿童节活动需要的设计感海报
- 万物互联,该怎么联?
- Spoken English
- QWidget子窗口适应父窗口大小
- 如何科学有效地根治肾虚——上篇(肾到底是什么?)
热门文章
- vue分享给QQ好友,QQ空间,微博
- 集合中的(交集,并集,差集,补集,对称差集)
- 面经分享:美团面试也太难了,4面美团终成Offer
- 光纤跳线接口_如何为SFP光模块搭配对应的光纤跳线?
- Smart Link概述
- 【React之文件的运行】用webstorm运行npm,实现网页的刷新
- Flutter动画Animation开发指南
- 返利网app有那些?哪一个最好用?
- 金士顿内存条真假测试软件,金士顿内存条真伪怎么看?金士顿内存条判别真伪的几种方法...
- windows7台式计算机网线连接,win7如何用一根网线连接两台电脑_一根网线怎样连接两台Win7电脑传输文件...