投递岗位
无线通信协议软件工程师(一志愿)
无线通信物理层软件工程师(二志愿)
时间线
24.08.31 简历投递
24.08.31 收到测评链接
24.09.03 完成测评
24.09.04 收到第一次笔试链接(放弃)
24.09.18 收到第二次笔试链接
24.09.19 完成笔试
24.09.24 接到电话所投递岗位在上海已没有hc,调岗至【嵌入式软件开发】岗位
24.09.26 再次收到测评
24.09.28 完成二次测评
笔试内容
形式:线上
平台:赛码网
题型:25选择(24单选+1多选)+2编程
考试时长:1.5h
选择题
主要考查常用数据结构(二叉树、栈、队列)、算法(给定数组求使用指定排序算法若干次后的数组内容、算法时间复杂度),含少量图论和代码工程规范开发相关的内容。
编程题
- 比较典型的01背包问题
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int T;
cin >> T;
int N, n, c;
vector<int> toy;
while (T--) {
cin >> N >> n >> c;
toy.resize(n);
for (int i = 0; i < n; i++)
cin >> toy[i];
vector<int> dp(N + 1, 0);
for (int i = 0; i < n; i++) {
for (int j = N; j >= toy[i]; j--) {
dp[j] = max(dp[j], dp[j - toy[i]] + toy[i]);
}
}
if (dp[N] + c >= N) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
测试用例:
2
10 4 1
2 3 5 7
10 1 3
6
参考输出:
YES
NO
- 排序问题:给定两个长度均为n的数组,同下标只能取其中一个数组中的元素,是否能构成一个单调非增或单调非减的序列
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool isAscending(const vector<int> a, const vector<int> b, vector<int>& c)
{
c[0] = min(a[0], b[0]);
for (int i = 1; i < a.size(); i++) {
if (a[i] >= c[i - 1] && b[i] >= c[i - 1])
c[i] = min(a[i], b[i]);
else if (a[i] >= c[i - 1])
c[i] = a[i];
else if (b[i] >= c[i - 1])
c[i] = b[i];
else
return false;
}
return true;
}
bool isDescending(const vector<int> a, const vector<int> b, vector<int>& c)
{
c[0] = max(a[0], b[0]);
for (int i = 1; i < a.size(); i++) {
if (a[i] <= c[i - 1] && b[i] <= c[i - 1])
c[i] = max(a[i], b[i]);
else if (a[i] <= c[i - 1])
c[i] = a[i];
else if (b[i] <= c[i - 1])
c[i] = b[i];
else
return false;
}
return true;
}
int main()
{
int T, n;
cin >> T;
vector<int> a, b, c;
int i;
while (T--) {
cin >> n;
a.resize(n);
b.resize(n);
c.resize(n);
for (i = 0; i < n; i++)
cin >> a[i];
for (i = 0; i < n; i++)
cin >> b[i];
if (isAscending(a, b, c) || isDescending(a, b, c)) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
测试用例:
2
5
1 3 5 2 4
5 2 3 4 1
7
1 2 3 4 3 2 1
4 3 2 1 2 3 4
参考输出:
YES
NO