森林中的兔子

题目介绍:

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 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;
    }
};

运行结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值