美团点评 9月6日 笔经
简单的太简单,难得太难,几乎没得挣扎,早早交卷去吃饭。
1.1
找的1 2 3,3 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;
} #美团##笔试题目#
途虎成长空间 159人发布