• Leetcode每日一题 781.森林中的兔子


    781. 森林中的兔子

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

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

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

    说明:

    • answers 的长度最大为1000。
    • answers[i] 是在 [0, 999] 范围内的整数。

    举个例子当一只兔子说有n只兔子与它相同,那么它和另外n只兔子一共加起来是n+1只,当又有一只兔子说有n只兔子相同,说明和上一个说有n个兔子的兔子可能是相同的,但我们要尽量使它们是相同的,那么怎么判断呢,很简单,我们只需要建立一个数组cnt,并初始化为0,比如说有一个兔子说有9个兔子和它相同,那么只要cnt[9]不为0,我们就设cnt[9] = 9,当又有一只兔子说它和9个兔子颜色相同,那么cnt[9]--;直到cnt[9] = 0,那么这就是我们所期望的10只兔子。如果此时又多了一只兔子说有9只与它们相同,证明这就是另外一种颜色了。

    class Solution {
    public:
        int numRabbits(vector<int>& answers) {
            int n = answers.size();
            if(n == 0)return 0;
    
            vector<int> cnt(1001,0);
            for(auto x : answers)
            {
                if(cnt[x] > 0)
                    cnt[x]--;
                else{
                    cnt[x] = x;
                    cnt[1000] += (x + 1);
                }
            
            }
    
            return cnt[1000];
        }
    };
    
  • 相关阅读:
    简单 dp 题选做
    UVa11327
    Codeforces Round #641 (div.2) 题解
    新博客
    数位dp的学习
    stl粗略用法
    cf437C The Child and Toy
    poj1995 Raising Modulo Numbers
    Tarjan的学习
    最短路模板
  • 原文地址:https://www.cnblogs.com/xiangqi/p/14616522.html
Copyright © 2020-2023  润新知