LeetCode 781. 森林中的兔子
原题链接
中等
作者:
Jocelin
,
2021-04-04 16:46:32
,
所有人可见
,
阅读 291
class Solution {
public:
int numRabbits(vector<int>& answers) {
sort(answers.begin(),answers.end());
int res = 0;
int i = 0;
//把0提取出来,单独加一
for(i = 0;i<answers.size();i++)
{
if( answers[i] == 0)
res += 1;
else
break;
}
cout << i;
//双指针求出每个数字有多少个
for( ;i < answers.size();i++)
{
int j = i;
while( j < answers.size() && answers[i] == answers[j])
{
j++;
}
int cnt = j -i; //当前相同有多少个
i = j - 1;
//每个数最少的话就是 answers[i] + 1 个,比如回答2的兔子,他最少是2+1个是三只,那我可以出现三次2
//如果出现4次2了,那我就要再加上3
int n = answers[i] + 1;
// 对于测试数据[0,0,2,2,2]如果是2 那就是最少有3个 最少的话可以出现三个2,如果出现第四个2 那我就要再加上3了
if(cnt % n == 0) // 刚好是当前数量的倍数
res += n * (cnt / n) ;
else //如果不是倍数的话,还要再加上一次
res += n * (cnt / n) + n;
}
return res;
}
};