网易笔试

1.牛牛找工作
这个问题一开始的思路是将工作按报酬从高到低排序,然后用小伙伴的能力依次匹配报酬,但是这样时间复杂度会超。

#include 
#include 
#include 
#include 
using namespace std;
struct job {
    int difficulty;
    int pay;
};
bool cmp(job a, job b) {
    return a.pay>b.pay;
};
int main(){
    int m,n;
    cin >> m>>n;
    vector jobs;
    for (int i=0; i>example.difficulty>>example.pay;
        jobs.push_back(example);
    }
    vector friends;
    for (int i=0;i> tmp;
        friends.push_back(tmp);
    }
    sort(jobs.begin(),jobs.end(),cmp);
    for (int i=0;ifriends[i]) j++;
        if (j==n) cout<<0<

想了一个很奇葩的算法,对难度和能力都排序

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
struct job {
    int difficulty;
    int pay;
};
struct people {
    int id;
    int ability;
};
bool cmp(job a, job b) {
    return a.difficulty> m>>n;
    vector jobs;
    for (int i=0; i>example.difficulty>>example.pay;
        jobs.push_back(example);
    }
    vector friends;
    for (int i=0;i> tmp.ability;
        tmp.id=i;
        friends.push_back(tmp);
    }
    //job的难度从小到大
    sort(jobs.begin(),jobs.end(),cmp);
    //同学的ability从小到大小
    sort(friends.begin(),friends.end(),cmp2);
    vector res(m,0);
    int i=0;
    int j=0;
    while(i=m) break;
    }
    //有可能出现能力为10的同学找了难度区间在[0,10]的最好工作a
    //能力为20的同学找了难度区间在[11,20]的最好工作b,但是b

后来看了一下题解,发现这样做最简单:https://blog.csdn.net/weixin_36416680/article/details/80010667

你可能感兴趣的:(Interview)