首页 > 其他 > 详细

781. Rabbits in Forest

时间:2018-03-02 21:14:47      阅读:210      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/Zzz-y/p/8494891.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!