题目介绍:
森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。
返回森林中兔子的最少数量。
题目分析:
因为要返回兔子的最少数量,所以回答相同数量的必然是同一种颜色,回答不同数量的不然是不同颜色。则某种颜色的兔子数量=该颜色的兔子报出的数字+1,兔子的最少数量为所有颜色的兔子数量相加。但是不排除单个兔子没有其他相同颜色即报“0”,还有一种情况就是多种不同颜色的集合数量相同,对于后面这种情况需要添加判断条件。为此我引入了k值,用于记录相同的数值出现的次数,一旦k的值大于answers[i]+1,则将k值变成一,最终结果加上answers[i]+1;
代码如下:
class Solution {
public:
int numRabbits(vector<int>& answers) {
if(answers.size()==0)
return 0;
sort(answers.begin(),answers.end());//排序,将相同项放在一起
int res=answers[0]+1;
int k=1;
for(int i=1;i<answers.size();i++){
if(answers[i]==0){
res+=1;
}
else if(answers[i]==answers[i-1]){
k++;
if(k>answers[i]+1){
res+=answers[i]+1;
k=1;
}
}
else{
res+=answers[i]+1;
k=1;
}
}
return res;
}
};