美团点评 9月6日 笔经

简单的太简单,难得太难,几乎没得挣扎,早早交卷去吃饭。

1.1

找的1 2 33 4 5里边的相同的数,力扣No.1 two sum的变形。

    int n, p, q;
    cin >> n >> p >> q;
    unordered_set<int> S;
    for (int i = 0, tmp = 0; i < p; ++i) {
        cin >> tmp;
        S.emplace(tmp);
    }
    int same = 0;
    for (int j = 0, tmp = 0; j < q; ++j) {
        cin >> tmp;
        if (S.find(tmp) != S.end()) same++;
    }
    printf("%d %d %d", p - same, q - same, same);

1.2

AAAAaa,可以任意反转大小写,输出使得大小写相等的一个数。

    char c;
    int count = 0, size = 0;
    while ((c = getchar()) != EOF) {
        if (c >= 'A' && c <= 'Z') ++count;
        ++size;
    }
    cout << abs(count - size / 2);

1.3

异或,题目比较复杂,简单来说就是一串输入异或,然后再异或上一个矩阵,这个要怎么化简我还真不知道,过了55%。

    uint32_t k;
    cin >> k;
    uint32_t ans = 0;
    for (int i = 1; i <= k; ++i) {
        for (int j = 1; j <= i; ++j) {
            ans ^= (i % j);
        }
        if ((k - i) % 2 == 1) ans ^= i;
    }
    for (uint32_t i = 0, tmp; i < k; ++i) {
        cin >> tmp;
        ans ^= tmp;
    }
    cout << ans;

1.4

根据给的数字生成一棵树,这颗树的每个节点只能由2个孩子或者0个孩子,问是否能成功。例如1 1 3就可以,前两个作为第三个数的孩子即可,但是1 2就不行,因为2这个节点必须有两个孩子。
不会做,骗了20%+。

2

单独的一个题,不知道这是什么操作,看着花里胡哨,就是LRU。

    list<uint32_t> l;
    unordered_map<uint32_t, list<uint32_t>::iterator> dict;
    uint32_t m;
    cin >> m;
    for (uint32_t i = 0, tmp; i < m; ++i) {
        cin >> tmp;
        if (dict.find(tmp) != dict.end()) {
            l.erase(dict[tmp]);
            l.emplace_front(tmp);
            dict[tmp] = l.begin();
        } else {
            l.emplace_front(tmp);
            dict.emplace(tmp, l.begin());
        }
    }
    for (auto p = l.begin(); p != l.end(); ++p) {
        cout << *p;
    }
#美团##笔试题目#
全部评论
数据开发岗也是这套题,难道是所有岗位都考算法题吗
点赞 回复
分享
发布于 2020-09-06 12:06
我也这么觉得😂
点赞 回复
分享
发布于 2020-09-06 12:07
联易融
校招火热招聘中
官网直投
最后一道,每个节点要么0个孩子,要么只少(注意)2个孩子,,
点赞 回复
分享
发布于 2020-09-06 12:08

相关推荐

1 3 评论
分享
牛客网
牛客企业服务