【LeetCode】森林中的兔子

1、题目链接

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。

返回森林中兔子的最少数量。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rabbits-in-forest

2、思路

如果一只兔子说了一个数字num,那么,具有与该兔子相同颜色的兔子总数一共是num+1

这也就是说,在剩余的answers中,如果出现num的次数不超过num次,那么所有的说num的兔子均可以看作是具有相同颜色的;如果num的次数超过了num,那么从第num+1个(在整个answers数组中是第num+2个)开始,需要将兔子重新标记为另一种颜色。

例如,answers=[2,2,2,2],那么前三个2就可以视为具有相同颜色的兔子,第四个是另外的颜色,因此,兔子的数量最少需要3+3=6。

因此,统计每个数字 n u m num num出现的次数 c o u n t n u m count_{num} countnum,然后按照每 n u m + 1 num+1 num+1个为一组进行划分,假设一共划分了 m m m组,剩余 r r r个(显然, 0 < = r < ( n u m + 1 ) 0<=r<(num+1) 0<=r<(num+1),如果 r > 0 r>0 r>0对于这些兔子,需要的最少的数量仍然是 n u m + 1 num+1 num+1个),那么,对于数字 n u m num num,所需要的最少的兔子的数量为 ( m + 1 ) ∗ ( n u m + 1 ) (m+1)*(num+1) (m+1)(num+1)

3、代码

在编码的时候,需要在出现整除的时候多加注意,此时,兔子的数量应该是 m ∗ ( n u m + 1 ) m*(num+1) m(num+1)。对应于上述思路的python代码如下:

class Solution:
    def numRabbits(self, answers: List[int]) -> int:
        count = {}
        total = 0
        for i in answers:
            if not count.get(i):
                count[i] = 1
            else:
                count[i] += 1
        for k in count:
            if k == 0:
                total += count[k] 
            else:
                m = count[k] // (k + 1)
                r = count[k] % (k + 1)
                if m == 0:
                    total += k + 1
                else:
                    weight = 0 if r == 0 else 1
                    total += (m + weight) * (k + 1)
        return total
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芳樽里的歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值