• 深信服C++笔试


    之前看深信服往年笔试只有编程,结果他搞偷袭,来了一堆选填!
    一、选择题
    1.c++容器array,deque我只记得有这两个
    相关知识:

    vector 向量容器
    二维数组指针、二维向量
    pair 对
    list 双向列表
    map 表
    unordered_map 哈希表
    set 集合
    unordered_set 哈希集合
    string 字符串
    stack 栈
    queue 队列
    deque 双端队列
    priority_queue 优先级队列
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、编程
    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 << " ";
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    好吧,有点记错了,上面是实现删除的两套逻辑。
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    想了想,这方法不能适用于有重复数字,有重复就有特例,md。
    3.区间交集数目
    贪心10min秒了。

  • 相关阅读:
    springboot 项目非docker 部署自动启动
    【MySQL】源码编译MySQL8.x+升级gcc+升级cmake(亲测完整版)
    Qemu 启动无法交互的处理方法
    适合学生党的百元蓝牙耳机,蓝牙耳机平价推荐
    数据分析师入门: 数据分析可视化入门知识点
    Java面试ZooKeeper面试题汇总及答案
    初识Mybatis(二)动态SQL、缓存和逆向工程
    团队协作如何确保项目Node版本的一致性?
    更改文本文件分隔符
    TSINGSEE青犀老旧小区升级改造AI+视频监控方案
  • 原文地址:https://blog.csdn.net/qq_45863239/article/details/126652471