题目分析
由于兔子回答的是和自己颜色相同的其他的兔子的数量,因此,假设有$x$只兔子都回答$y$,则这些兔子至少有$[\frac {x}{y + 1}]$(向上取整)种不同颜色,而每种颜色有$y + 1$只兔子,兔子数至少为$[\frac {x}{y + 1}]*(y + 1)$。
代码思路
用哈希表统计answers
中各个元素出现的次数。hash->second
对应题目分析里的$x$,hash->first
对应题目分析里的$y$。
注意在代码中的向上取整:$ceil(a/b) = (a + b - 1) / b$
C++ 代码
class Solution {
public:
int numRabbits(vector<int>& answers) {
unordered_map<int, int> hash;
for(int i = 0;i < answers.size(); i ++ )
hash[answers[i]] ++ ;
int res = 0;
for(auto i = hash.begin(); i != hash.end(); i ++ )
res += (i->second + i->first) / (i->first + 1) * (i->first + 1);//注意向上取整的写法
return res;
}
};