[leetcode] 781. Rabbits in Forest

网友投稿 872 2022-08-23

[leetcode] 781. Rabbits in Forest

[leetcode] 781. Rabbits in Forest

Description

In a forest, each rabbit has some color. Some subset of rabbits (possibly all of them) tell you how many other rabbits have the same color as them. Those answers are placed in an array.

Return the minimum number of rabbits that could be in the forest.

Examples: Input:

answers = [1, 1, 2]

Output:

5

Explanation:

The two rabbits that answered "1" could both be the same color, say red.The rabbit than answered "2" can't be red or the answers would be inconsistent.Say the rabbit that answered "2" was blue.Then there should be 2 other blue rabbits in the forest that didn't answer into the array.The smallest possible number of rabbits in the forest is therefore 5: 3 that answered plus 2 that didn't.

Input:

answers = [10, 10, 10]

Output:

11

Input:

answers = []

Output:

0

Note:

answers will have length at most 1000.Each answers[i] will be an integer in the range [0, 999].

分析

题目的意思是:有n个兔子,然后每个兔子都说有多少兔子颜色跟自己一样,问满足条件的最少兔子数是多少。

例如[0, 0, 1, 1, 1],前两只兔子都说森林里没有兔子和其颜色相同了,那么这两只兔子就是森林里独一无二的兔子,且颜色并不相同,所以目前已经确定了两只。然后后面三只都说森林里还有一只兔子和其颜色相同,那么这三只兔子就不可能颜色都相同了,但我们可以让两只颜色相同,另外一只颜色不同,那么就是说还有一只兔子并没有在数组中,所以森林中最少有6只兔子。分析完了这几个例子,我们可以发现,如果某个兔子回答的数字是x,那么说明森林里共有x+1个相同颜色的兔子,我们最多允许x+1个兔子同时回答x个,一旦超过了x+1个兔子,那么就得再增加了x+1个新兔子了。所以我们可以使用一个HashMap来建立某种颜色兔子的总个数和在数组中还允许出现的个数之间的映射,然后我们遍历数组中的每个兔子,如果该兔子回答了x个,若该颜色兔子的总个数x+1不在HashMap中,或者映射为0了,我们将这x+1个兔子加入结果res中,然后将其映射值设为x,表示在数组中还允许出现x个也回答x的兔子;否则的话,将映射值自减1即可

代码

class Solution {public: int numRabbits(vector& answers) { int res=0; unordered_map m; for(int i=0;i

参考文献

​​[LeetCode] Rabbits in Forest 森林里的兔子​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 406. Queue Reconstruction by Height
下一篇:iOS 圆角箭头矩形 提示框(ios16什么时候可以更新)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~