Leetcode 781 Rabbits In Forest (C++ Solution)


图论

问题描述

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

返回森林中兔子的最少数量。

样例

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

提示

  1. answers 的长度最大为1000
  2. answers[i] 是在 [0, 999] 范围内的整数。

思路(Algorithm)

图论

设一只兔子是一个点,当两只兔子颜色相同时,两个顶点之间存在一条边,则每个兔子提供的数字,则是该顶点存在几条出边,则可以知道以下几点:

  1. 每个顶点都在一个完全图中
  2. 对于一个完全图,其 顶点个数=1+单个点的相邻边数

那么,当前问题转化为,对于一定个数的已知相邻边个数的顶点,在该完全图集合下,最少存在几个顶点。

则 对于集合中的一个完全图,设D为理论最少顶点个数,e为单个顶点的相临边个数,d为当前已知的相临边个数为e的顶点个数,则有
D=⌈de+1⌉∗(e+1)D=\left \lceil \frac{d}{e+1}\right\rceil*(e+1) D=⌈e+1d​⌉∗(e+1)
那么代码部分工作只需要:

  1. 统计 每个e值下的d
  2. 计算每个完全图的D值,并求和

实现代码(Implement)

class Solution {
public:int numRabbits(vector<int>& answers) {int max=-1;int n=answers.size();if(n==0) return 0;// 找到最大值,创建合适大小的完全图集合for(int i=0; i<n; i++){if(answers[i]>max) max=answers[i];}// 初始化为0int count[max+1];for(int i=0; i<=max; i++){count[i]=0;}// 统计 每个e下的d值for(int i=0; i<n; i++){count[answers[i]]++;}// 计算每个完全图下的D值 并求和int num=0;for(int i=0; i<=max; i++){num=num+count[i]/(i+1)*(i+1);if(count[i]%(i+1)!=0){num+=(i+1);}}return num;}
};

运行结果

复杂度分析

时间复杂度

O(n)O(n)O(n)

空间复杂度

O(n)O(n)O(n)

声明

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/rabbits-in-forest

$

空间复杂度

O(n)O(n)O(n)

声明

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/rabbits-in-forest

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Leetcode 781 森林里的兔子(C++)相关推荐

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

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

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

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

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

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

  4. 罗振宇解读《今日简史》:21个议题就是21个千亿美金的机会

    这个时代,既然手机出新品可以开发布会,一个知识产品为什么不可以?一本新书.一堂新课,也应该有它诞生的证明. 所以在这个时代,我们有了好东西,就大胆地对用户喊出来. 今天我们要发布的是一本书,一本新书, ...

  5. 大学生职业生涯规划——我的未来我做主

      前言 职业生涯规划是指个人发展与组织发展相结合,通过对职业生涯的主客观因素分析.总结和测定,确定一个人的奋斗目标,并为实现这一事业职业目标,而预先进行生涯系统安排的过程.在任何社会.任何体制下,个 ...

  6. 一段百年征程的有限单群

    1832年的某个清晨,革命中的法国见证了重新决斗. 在某个瞬间,某位青年被对手的枪射中腹部.随后去世.在当时狂热的政治斗争中,仅仅有寥寥数人意识到.法国,甚至世界.又失去了还有一个伟大的头脑. 这位青 ...

  7. 取得最高系统管理员权限的有效方法

    一. 权限的由来 远方的某个山脚下,有一片被森林包围的草原,草原边上居住着一群以牧羊为生的牧民.草原边缘的森林里,生存着各种动物,包括野狼. 由于羊群是牧民们的主要生活来源,它们的价值便显得特别珍贵, ...

  8. 无形的栅栏 完全解析Windows系统权限(转)

    无形的栅栏 完全解析Windows系统权限(1) 一. 权限的由来 远方的某个山脚下,有一片被森林包围的草原,草原边上居住着一群以牧羊为生的牧民.草原边缘的森林里,生存着各种动物,包括野狼. 由于羊群 ...

  9. Windows系统权限

    无形的栅栏 完全解析Windows系统权限(1) 一. 权限的由来 远方的某个山脚下,有一片被森林包围的草原,草原边上居住着一群以牧羊为生的牧民.草原边缘的森林里,生存着各种动物,包括野狼. 由于羊群 ...

最新文章

  1. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)
  2. 使用VMware桥接模式组建局域网测试MSMQ(二)
  3. 小冰公司CEO李笛:强大的AI工具不应该给企业,应该给劳动者 | MEET2021
  4. python【数据结构与算法】最小生成树之Kruskal算法
  5. 几个解决 Maven Jar 包冲突的小技巧,太实用了!
  6. Python小游戏之 - 飞机大战 !
  7. sizeof()浅解
  8. 塔式服务器、机架式服务器、刀片服务器区别小结
  9. Common BeanUtils 简介
  10. 故乡与文学:一场别开生面的跨年代文学对话(一)
  11. jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏
  12. active mq topic消费后删除_【SpringBoot MQ 系列】RabbitListener 消费基本使用姿势介绍
  13. Unity——浅谈AB包(AssetBundle)
  14. 普元EOS7.5生成入参为数组的WebService接口
  15. 环绕声混响效果器-Acon Digital Verberate Immersive 2.2.1 WiN-MAC
  16. word设置表格文字紧贴下框线
  17. 家中买的计算机配置,配置,教您买电脑主要看哪些配置
  18. 出现VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。 未能将管道连接到虚拟机: 所有的管道范例都在使用中。
  19. html 图片显示的几种方式
  20. 化合物纯度、溶剂溶解度检测

热门文章

  1. 交通事故现场拍照技巧
  2. 江西理工大学计算机网络基础试卷,无线网络技术作业(江西理工大学期末复习)...
  3. 使用友盟进行app的增量更新
  4. 【渝粤教育】电大中专电子商务网站建设与维护 (2)_1作业 题库
  5. [转载]坐标系统与投影变换
  6. WindowsPE无法安装系统
  7. php授权微信自动扣款,【微信支付】微信代扣开发者文档
  8. adams语句_ADAMS模态力 - MSC技术文章 - 中国仿真互动网(www.Simwe.com)
  9. android人脸识别——HowOld测测你的年龄和性别
  10. 阿里巴巴国际站运营排名规则 外贸b2b平台阿里巴巴国际站优化技巧方法