LeetCode 781. 森林中的兔子
原题链接
中等
作者:
Anoxia_3
,
2021-04-04 21:07:31
,
所有人可见
,
阅读 302
class Solution {
public:
int numRabbits(vector<int>& a) {
vector<int> cnt(1001 , 0);
for(int &x : a)
cnt[x]++;
int res = 0;
for(int i = 0 ; i < 1001 ; i++)//枚举说存在i只兔子与自己颜色相同的兔子数
{
int t = cnt[i];//t只兔子说有i只兔子的颜色与自己相同
/*
①如果存在的数量比说的兔子少,为了使答案尽可能的小,应该令i+1只兔子的颜色相同,
那么颜色种数是t/(i+1),这部分对答案的贡献是t/(i+1)*(i+1)。
例如有14只兔子都说存在5只兔子的颜色与自己相同,那么令(1+5)只兔子为一种颜色,
则会有14/(5+1)种颜色相同的兔子,且每种颜色5+1只。
剩下的2只放到下面继续讨论
*/
if(t > i) res += t / (i + 1) * (i + 1) , t -= t / (i + 1) * (i + 1);
//②如果存在的数量比说的兔子多,为了使答案尽可能的小,这些兔子应该都是一种颜色,所以贡献是i+1
if(t > 0) res += i + 1;
}
return res;
}
};