之前看深信服往年笔试只有编程,结果他搞偷袭,来了一堆选填!
一、选择题
1.c++容器array,deque我只记得有这两个
相关知识:
vector 向量容器
二维数组指针、二维向量
pair 对
list 双向列表
map 表
unordered_map 哈希表
set 集合
unordered_set 哈希集合
string 字符串
stack 栈
queue 队列
deque 双端队列
priority_queue 优先级队列
2.sleep函数的作用
Sleep括号里的时间,在windows下是已毫秒为单位,而Linux是以秒为单位
Sleep(0) 的意义是放弃当前线程执行的时间片,把自身放到等待队列之中
Sleep(3000);//暂停3秒 S要大写
3.线性结构有哪些
4.二叉排序树
5.执行态与就绪态的转换
执行态可以转为阻塞态
6.char数组
7.宏定义
8.正则表达式(a|b)*c+[^0-9]
*:重复零次或更多次
[^0-9]不匹配数字
a或b有几个
9.表达式为真。int a=6869,int b==6976,然后一堆判断的
10.&的运用
二、填空
1.网络字节序特指?
大端序
2.(unsigned short int)(-1234)
short int型转化为unsigned short int型,也是原码->反码(除符号位取反)->补码(反码加1)
3.中序
4.int a 最低有效位起算第三个字节的数值
5.数学题
6.后缀表达式
7.static 局部变量未初始化,然后++问输出值。。
默认为0
8.(a=w>x&&b=y>z)之后a与b的值
9.sizeof内存对齐?
10.fun(&ptr)之类的
#include
using namespace std;
int fun(int* ptr,int b) {
*ptr=*ptr+2;
b++;
return *ptr+b;
}
int main() {
int ptr = 20;
int b = 20;
int a = fun(&ptr,b);
cout << a << endl;
cout << ptr << endl;
cout << b << endl;
}//模拟深信服C++笔试一道题
三、编程
1.k轮胜者
vector erase不行吗?后面手动实现了一下
要用迭代器
array.erase(array.begin() + 1);
vector<int>::iterator itor= array.begin() + 1;
array.erase(itor);
for (vector<int>::iterator itor1 = array.begin(); itor1 != array.end(); itor1++)
{
cout << *itor1 << " ";
}
好吧,有点记错了,上面是实现删除的两套逻辑。
2.最长连续排序数目
随机快排加单指针遍历过90
dp能过100
int main() {
int n;
cin >> n;
vector<long long>a;
int x;
int re = 1;
int left = 1;
vector<long long>dp(n + 1, 0);
a.push_back(0);//占位,从此1为第一个数
for (int i = 1; i <= n; i++) {
cin >> x;
dp[i] = dp[i - 1] + x;//前n项和数组
a.push_back(x);
long long minn = x;
long long maxx = x;
for (int j = i - 1; j >= left; j--) {
long long sum = dp[i] - dp[j - 1];//差分,求j到i的和
minn = min(minn, a[j]);
maxx = max(maxx, a[j]);
if (sum == (long long)(minn + maxx) * (i - j + 1) / 2 && (maxx - minn) == (i - j)) {
re = max(re, i - j + 1);
}
}
}
cout << re << endl;
}
想了想,这方法不能适用于有重复数字,有重复就有特例,md。
3.区间交集数目
贪心10min秒了。