• 67森林中的兔子(781)


    作者: Turbo时间限制: 1S章节: 哈希表

    晚于: 2020-08-19 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-26 12:00:00

    问题描述 :

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

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

    示例:

    输入: answers = [1, 1, 2]

    输出: 5

    解释:

    两只回答了 "1" 的兔子可能有相同的颜色,设为红色。

    之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。

    设回答了 "2" 的兔子为蓝色。

    此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。

    因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。

    输入: answers = [10, 10, 10]

    输出: 11

    输入: answers = []

    输出: 0

    输入说明 :

    首先输入answers数组的长度n,n<=1000

    然后输入n个整数,以空格分隔,每个整数在 [0, 999] 范围内

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream> 
    #include <vector>
    #include <unordered_map>
    using namespace std;
    
    class Solution {
    public:
        int numRabbits(vector<int>& answers) 
        {
            unordered_map<int,int> map;
            for(int i=0;i<answers.size();i++)
            {
                map[answers[i]]++;
            }
            int res=0;
            for(auto m:map)
            {
                if(m.second%(m.first+1)==0)
                {
                  res+=(m.second/(m.first+1))*(m.first+1);
                //  cout<<"hahhh"<<m.first<<" "<<m.second<<" "<<m.second/(m.first+1)<<" "<<res<<endl;
                }
                else
                {
                    res+=((m.second/(m.first+1))+1)*(m.first+1);
                //    cout<<"lll"<<m.first<<" "<<m.second<<" "<<((m.second/(m.first+1))+1)<<" "<<res<<endl;
                }
            }
            return res;
        }
    };
    int main()
    {
        int n,data,k;
        vector<int> nums;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cin>>data;
            nums.push_back(data);
        }
        int res=Solution().numRabbits(nums);
        cout<<res;
        return 0;
    }
    // 用hash来统计answers中每个数字出现的次数; 然后就是开始处理哈希表里面的统计结果了;
    // 例如, 5出现了8次, 那么至少得2*(5+1)只兔子; 如果5出现了6次呢? 至少需要6只兔子; 如果5出现了3次呢? 还是6只兔子;
    // 当val出现了t次, 如果t%(val+1) == 0, 
    //需要(t/(val+1))*(val+1)只兔子; 如果没有整除, 则至少需要(t/(val+1)+1)*(val+1)只兔子;
  • 相关阅读:
    k8s网络策略
    二进制部署Kubernetes
    宿主机的命令在容器中使用
    高可用示例
    企业级高可用Harbor 2.3
    openstack常用shell脚本
    shell实现jumpserver
    我曾七次鄙视自己的灵魂
    queue容器适配器模拟超市结账环节
    stack容器适配器实现计算器(含实现代码)
  • 原文地址:https://www.cnblogs.com/zmmm/p/13645626.html
Copyright © 2020-2023  润新知