京东9.17笔试 C/C++岗
20道选择,三道编程。编程题第一题忘记了,第二题求最少移动次数,第三题求优美串(有red没der)
前两题AC,最后一题0%,求一个大佬讲解一下第三题
贴一下我自己前两题的AC代码
第一题
#include <iostream>
#include <vector>
using namespace std;
int main() {
int a = 0, b = 0;
cin >> a >> b;
if (a > b + 1) {
cout << -1 << endl;
return 0;
}
vector<int> nums(a + b, 2);
for (int i = 0; i < a; ++i) {
nums[2 * i] = 1;
}
for (int i = 0; i < a + b; ++i)
cout << nums[i] << " ";
cout << endl;
return 0;
} 第二题 #include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int main() {
int n = 0;
int k = 0;
cin >> n >> k;
vector<int> iv(n, 0);
int a = 0;
for (int i = 0; i < n; ++i) {
cin >> a;
iv[i] = a;
}
vector<int> visited(k + 1, 0);
long long needRemovedIdxSum = 0;
for (int i = 0; i < k; ++i) {
if (iv[i] <= k && visited[iv[i]] == 0)
visited[iv[i]] = 1;
else {
needRemovedIdxSum += i;
}
}
long long needInsertIdxSum = 0;
for (int e = 1; e <= k; ++e) {
if (visited[e] == 0) {
for (int subi = k; subi < iv.size(); ++subi) {
if (iv[subi] == e) {
needInsertIdxSum += subi;
break;
}
}
}
}
cout << needInsertIdxSum - needRemovedIdxSum << endl;
return 0;
}
查看13道真题和解析