LeetCode 781. 森林中的兔子
原题链接
中等
作者:
别嫔
,
2021-04-05 10:22:25
,
所有人可见
,
阅读 212
C++ 代码
class Solution {
public:
int numRabbits(vector<int>& answers) {
int res=0;
// 1. 同一颜色的兔子回答的数值必然是一样的
// 2. 回答同样数值的,不一定就是同颜色兔子
// 3. 同一颜色的兔子回答均为a时,它们必然有a+1只(form 1.)
// 4. 假设回答同一数值a的兔子有b只
// 5. 贪心:我们希望同一颜色的兔子数量尽可能的多,
// 6. 如果 b<=a+1,贪心后我们认为只有一种颜色的兔子;
// 7. 若是 b>a+1 ,每次回答a的兔子,我们都希望将它抓进一个容量为a+1的同色兔笼子,直到该笼子装满,我们再拿一个新的笼子
// 那么用一个vector存储回答a的兔子的个数
vector<int> hash_rabbits(1000,0);
// 遍历 anwers
for(int a : answers) {
// 已有回答过相同数量的兔子,这次遇到只需容量减1
if(hash_rabbits[a]) hash_rabbits[a]--;
else {
//第一次遇到回答a的兔子或者上一次遇到回答a的兔子时创建的同色兔笼已经用完. 创建新的笼子,容量为a,并将a加到res中
hash_rabbits[a]=a;
res +=a+1;
}
}
return res;
}
};