781 森林中的兔子【python3】

给定兔子回答颜色相同兔子的数量数组,程序需计算森林中兔子的最小数量。当答案为0时,表示独特颜色的兔子;若答案为x,则至少有x+1只同色兔子。代码实现通过统计每个答案的出现次数,判断是否满足x+1的关系来确定最少兔子数。

题目

森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你(指被提问的兔子)颜色相同?” ,将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。

给你数组 answers ,返回森林中兔子的最少数量。
例如:

输入:answers = [1,1,2]
输出:5
解释:
两只回答了 "1" 的兔子可能有相同的颜色,设为红色。 
之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 "2" 的兔子为蓝色。 
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。 
因此森林中兔子的最少数量是 5 只:3 只回答的和 2 只没有回答的。

思路

由示例,我们最好是把回答了相同数字的兔子当作相同的颜色,那么可以得到森林中最少的兔子数量。

  1. 特殊情况:答案是0的兔子,说明这些兔子的颜色在森林里独一无二。无论数量最多还是最少,这类颜色的兔子都只有它们自己一只。

  2. 回答相同数字的兔子数量≤\leq回答数字+1,最少的情况即为:回答数字+1
    例如:一共有3只兔子回答5,那么最少的情况就是,这三只兔子都是同一个颜色,对于任何一只兔子而言,回答的数字5都包括另外两只。那么加上回答的兔子自己,这种颜色的兔子最少有6只

  3. 回答相同数字的兔子数量>>>回答数字+1:
    比如有7只兔子回答2,那么这7只兔子不可能都是同一种颜色.应当把它们分为(2+1)=3个一组:2,2,2∣2,2,2∣22,2,2|2,2,2|22,2,2∣2,2,2∣2每一组的兔子为同一种颜色,按照步骤2的方法计算总共的兔子数量。
    比如按照这个举例应当是(2+1)*3=9只兔子为最少的情况

代码

class Solution:
    def numRabbits(self, answers: List[int]) -> int:
        rabibit_num=0
        D={x:0 for x in answers}
        for x in answers:
            D[x]+=1

        for x in D:
            if x+1>=D[x] and x>0:
                rabibit_num+=x+1
            elif x+1<D[x] and x>0:
                if D[x]%(x+1)==0:
                    rabibit_num+=D[x]//(x+1)*(x+1)
                else:
                    rabibit_num+=D[x]//(x+1)*(x+1)+(x+1)  
            elif x==0:
                rabibit_num+=D[x] 
        
        return rabibit_num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值