2018年网易实习生笔试题集合之牛牛找工作

1.牛牛找工作

问题描述:n种工作 每个工作有一个难度指数d,和一个报酬p

                m个人,每个人有一个能力指数a。

                帮助这m个人找到报酬最大的工作。


思考:采用合适的数据结构来存储和处理题目给的数据,于是采用stl中的map,因为map在处理这种一一对应的两个值时有优势,如果想要使用vector那就必须自己定义一个结构体。

思路:用map将这些d和p存储起来之后,我们要对数据进行处理这样才能对任意一个能力a快速的找到所对应的最大薪酬,处理方式是将 任意一个难度指数 对应的存储 最大的薪酬。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin >> n >> m;
    if( n < 0 || n >100000 || m < 0 || m > 100000)
        return 0;
    map<int,int> aMap;
    for(int i = 0; i < n; i++)
    {
        int d,p;
        cin >> d >> p;
        aMap[d] = aMap[d] == 0 ? p : max(aMap[d],p);
    }
    int temp = 0;
    auto iter = aMap.begin();
    for(;iter != aMap.end();iter++)
    {
        temp = max(temp,iter->second);
        iter->second = temp;
    }
    for(int i = 0; i < m; i++)
    {
        int res = 0;
        int a;
        cin >> a;
        iter = aMap.upper_bound(a);
        iter--;
        res = iter->second;
        cout << res << endl;
    }
}

其中第一个循环将数据读入map,第二个循环将对数据进行处理,第三个循环对每个人进行寻找。upper_bound函数是采用二分查找的方式查找第一个大于参数的位置 返回当前位置的 迭代器。

其实本题我不怎么想用map,因为在第一个循环中我用了一个三元操作符,它的功能是如果难度指数相同的情况只保留薪酬大的数值,我对map操作不熟练,我觉得既然出现key值相同的情况我就不想用map咯,不然还要搞事情。

所以我用大家最喜欢的vector再写了一遍。

思路相同代码如下:

#include<bits/stdc++.h>
using namespace std;
struct offer
{
    int d,p;
    bool operator < (const offer o) const
    {
        return d < o.d;
    }
};
int main()
{
    int n,m;
    cin >> n >> m;
    if( n < 0 || n >100000 || m < 0 || m > 100000)
        return 0;
    vector<offer> arry;
    for(int i = 0; i < n; i++)
    {
        offer o;
        int d,p;
        cin >> o.d >> o.p;
        arry.push_back(o);
    }
    sort(arry.begin(),arry.end());
    int temp = 0;
    auto iter = arry.begin();
    for(;iter != arry.end();iter++)
    {
        temp = max(temp,(*iter).p);
        (*iter).p = temp;
    }
    for(int i = 0; i < m; i++)
    {
        int res = 0;
        offer oo;
        cin >> oo.d;
        iter = upper_bound(arry.begin(),arry.end(),oo);
        iter--;
        res = (*iter).p;
        cout << res << endl;
    }
}

这里定义了一个结构体offer(希望能找到工作QAQ)然后重载了 <  这样后面的sort函数 upper_bound函数 才能正常使用。

所有代码都经过测试,请放心食用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值