码迷,mamicode.com
首页 > 其他好文 > 详细

781. Rabbits in Forest

时间:2018-03-02 22:06:09      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:its   hose   public   ini   color   bit   tor   therefore   blog   

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

标签:its   hose   public   ini   color   bit   tor   therefore   blog   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!