森林中的兔子

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 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森林中的兔子题解相关推荐

  1. [Swift]LeetCode781. 森林中的兔子 | Rabbits in Forest

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. Leetcode--781.森林中的兔子

    森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最少数量. 示例: 输入: answers ...

  3. 森林中的兔子(超详细解析)

    森林中的兔子题目题解 题目 解析 题解一 题解二 题目 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返 ...

  4. 森林中的兔子,有感而抒

    力扣4月4日每日一题,传送门 有感而抒 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最 ...

  5. leetcode 781. 森林中的兔子(hashmap)

    森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. 返回森林中兔子的最少数量. 示例: 输入: answers ...

  6. LeetCode 781. 森林中的兔子(哈希+贪心)

    文章目录 1. 题目 2. 解题 1. 题目 森林中,每个兔子都有颜色. 其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色. 我们将这些回答放在 answers 数组里. 返回森林 ...

  7. leetcode每日一题—781.森林中的兔子

    题目: 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里.返回森林中兔子的最少数量. 解答: class So ...

  8. leetcode 781. Rabbits in Forest | 781. 森林中的兔子(Java)

    题目 https://leetcode.com/problems/rabbits-in-forest/ 题解 另 answers 中的每一个元素称为 n,那么,n 最多能抵消 n+1 个同类元素. c ...

  9. 科研文献|根相关真菌群落反映了亚热带森林中宿主的空间共生模式

    TITLE:Root-associated fungal community reflects host spatial co-occurrence patterns in a subtropical ...

  10. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数

    R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录

最新文章

  1. Varnish3.0中文入门教程-应用篇2
  2. 多线程实现的二种方式
  3. shell对文本进行操作命令
  4. 项目经理之项目经理的基本特征
  5. 【Python】Python的类和对象(长文系列第⑤篇)
  6. 使用nodejs创建Marketing Cloud的contact数据
  7. oracle vertica性能对比,测试Vertica性能
  8. git 几种还原版本_Git恢复之前版本的两种方法reset、revert(图文详解)
  9. 管理实践-教练技术的应用
  10. 日期setMinutes()方法以及JavaScript中的示例
  11. Elasticsearch合并高亮字段
  12. internet download manager补丁_NS《古树旋律》推出免费追加乐曲补丁 含五首新曲!...
  13. StackOverflow
  14. python基于神经机器翻译技术的翻译网站实现
  15. Python自学的好方法
  16. 儿童节活动需要的设计感海报
  17. 万物互联,该怎么联?
  18. Spoken English
  19. QWidget子窗口适应父窗口大小
  20. 如何科学有效地根治肾虚——上篇(肾到底是什么?)

热门文章

  1. vue分享给QQ好友,QQ空间,微博
  2. 集合中的(交集,并集,差集,补集,对称差集)
  3. 面经分享:美团面试也太难了,4面美团终成Offer
  4. 光纤跳线接口_如何为SFP光模块搭配对应的光纤跳线?
  5. Smart Link概述
  6. 【React之文件的运行】用webstorm运行npm,实现网页的刷新
  7. Flutter动画Animation开发指南
  8. 返利网app有那些?哪一个最好用?
  9. 金士顿内存条真假测试软件,金士顿内存条真伪怎么看?金士顿内存条判别真伪的几种方法...
  10. windows7台式计算机网线连接,win7如何用一根网线连接两台电脑_一根网线怎样连接两台Win7电脑传输文件...