首页 > 美团点评 9月6日 笔经
头像
suyc
编辑于 2020-09-06 12:05
+ 关注

美团点评 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;
    }

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐