781. Rabbits in Forest

Posted Zzz...y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了781. Rabbits in Forest相关的知识,希望对你有一定的参考价值。

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" cant 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 didnt answer into the array.
The smallest possible number of rabbits in the forest is therefore 5: 3 that answered plus 2 that didnt.

Input: answers = [10, 10, 10]
Output: 11

Input: answers = []
Output: 0

在一个树林里,问了一群兔子,每只兔子回答有多少只兔子跟自己颜色相同(不包括自己)。求树林里最少有多少只兔子。

解决:首先要统计每种回答的个数。然后看某一种统计个数中能组队的兔子数量。

比如,说1的兔子有3只,那么有两只能互相组队,另外一只要再拉一个。所以就是4只兔子。

说10的兔子有5只,那么这五只组队,并且还要再拉6只,这样就有11只一样颜色的兔子。

所以,每种答案下的兔子数量为: (num + 1) * ((cnt - 1) / (num + 1) + 1) 

 1 class Solution {
 2 public:
 3     int numRabbits(vector<int>& answers) {
 4         int sum = 0;
 5         unordered_map<int, int> m;
 6         for (auto ans: answers) 
 7             ++m[ans];
 8         unordered_map<int, int>::const_iterator it;
 9         for (it = m.begin(); it!=m.end(); ++it) {
10             int num = it->first;
11             int cnt = it->second;
12             sum += (num + 1) * ((cnt - 1) / (num + 1) + 1);
13         }
14         return sum;
15     }
16 };

 

以上是关于781. Rabbits in Forest的主要内容,如果未能解决你的问题,请参考以下文章

781. Rabbits in Forest

781. Rabbits in Forest

[哈希] leetcode 781 Rabbits in Forest

LeetCode781. Rabbits in Forest (Hash Table + Math)

[Math_Medium] 781. Rabbits in Forest

Codeforces 781D Axel and Marston in Bitland 矩阵 bitset