C++笔试真题

可变分区管理方案

  • 最佳适应:空闲区按容量递增
  • 最坏适应:空闲区按容量递减
  • 首先适应:空闲区按地址递增

C++的结构体中有构造函数。

Linux新建用户或组

  • useradd:命令用于建立用户账号
  • usermod:修改用户账号
  • groupadd:创建一个新的工作组
  • userdel:删除用户账号

#include可以出现在程序文件的中间。

函数声明可以省略形参名,定义时不可以。

线性表

一个非空的数据结构如果满足以下两个条件:

  1. 有且只有一个根节点
  2. 每一个结点最多有一个前节点,也最多有一个后节点

称为线性结构,在数据结构中称为线性表。
双向链表结点具有两个指针域,属于线性结构。
循环链表所有结点的指针都非空,也属于线性结构。

查找哈希表

构造哈希表的方法包括:直接地址法、除留余数法。

解决冲突的方法包括:

  • 链地址法:将哈希值相同的元素用链表进行相连。
  • 线性探测再散列法:冲突后依次向下循环查找空位置进行放置

数字范围按位与

给两个整数left和right,表示区间[left, right],返回此区间内所有数字按位与的结果。

对于一系列的位,只要有一个零值的位,那么这一系列的按位与运算结果都为零。

在这里插入图片描述
在上面的例子中,我们可以发现,对所有数字执行按位与运算的结果是所有对应二进制字符串的公共前缀再用零补上后面的剩余位。

只出现一次的数字(二)

给一个整数数组nums,除某个元素仅出现一次外,其余每个元素都出现三次,找到并返回只出现了一次的元素。

设计线性时间复杂度的算法,并且使用常数级空间解决此问题。

依次确定每个二进制位
由于数组中的元素在int范围内,可以依次计算答案的每一个二进制位是0还是1。

具体地,考虑答案的第i个二进制位(i从0开始编号),它可能为0或1。

答案的第i个位就是数组中所有元素的第i个二进制位之和除以3的余数。

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0;for(int i=0; i<32; i++){int sum = 0;for(int num : nums){sum += ((num >> i) & 1);}ret += ((sum%3) << i);}return ret;}
};

Pow(x, n)

快速幂+递归
快速幂算法的本质是分治算法。
从x开始,每次直接把上一次的结果平方。计算5次就可以得到x64次方。

class Solution {
public:double quickMul(double x, long long N){if(N == 0){return 1.0;}double y = quickMul(x, N/2);return N%2 == 0 ? y * y : y * y * x;}double myPow(double x, int n) {long long N = n;return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); }
};

阶乘后的零

给一个整数n,返回n!结果中尾随零的数量。

n!尾零的数量,就是求因子10的个数,而10=2x5,因此转换成求n!中质因子2的个数和质因子5的个数的较小值。

由于质因子5的个数不会大于质因子2的个数,仅考虑质因子5的个数。

而n!中质因子5的个数等于每个数的质因子5的个数之和。

class Solution {
public:int trailingZeroes(int n) {int res = 0;for(int i=5; i<=n; i += 5){for(int j=i; j%5 == 0; j/=5){res++;}}return res;}
};

环形链表

快慢指针

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:bool hasCycle(ListNode *head) {if(head == nullptr || head->next == nullptr){return false;}ListNode* slow = head->next;ListNode* fast = head->next->next;while(fast != nullptr){if(slow == fast){return true;}if(fast->next == nullptr){return false;}slow = slow->next;fast = fast->next->next;}return false;}
};

合并两个有序链表

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 == nullptr){return list2;}if(list2 == nullptr){return list1;}ListNode* newHead;if(list1->val <= list2->val){newHead = list1;list1 = list1->next;}else{newHead = list2;list2 = list2->next;}ListNode* p = newHead;while(list1 && list2){if(list1->val <= list2->val){p->next = list1;p = p->next;list1 = list1->next;}else{p->next = list2;p = p->next;list2 = list2->next;}}while(list1){p->next = list1;p = p->next;list1 = list1->next;}while(list2){p->next = list2;p = p->next;list2 = list2->next;}return newHead;}
};

对称二叉树

在这里插入图片描述
如果一个树的左子树和右子树镜像对称,那么这个树是对称的。

  • 它们的两个根节点具有相同的值
  • 每个树的右子树与另一个树的左子树镜像对称

二叉树的层平均值

广度优先遍历
从根节点开始搜索,每一轮遍历同一层的全部节点,计算该层的节点数以及该层的节点数之和,然后计算该层的平均值。

  • 初始时,将根节点入队列。
  • 每一轮遍历时,将队列中的节点全部取出,计算这些节点的数量以及和,然后计算平均值,然后将节点的全部为空子节点加入队列。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {vector<double> average;queue<TreeNode *> que;que.push(root);while(!que.empty()){double sum = 0;int size = que.size();for(int i=0; i<size; i++){TreeNode* node = que.front();que.pop();sum += node->val;TreeNode* left = node->left;TreeNode* right = node->right;if(left){que.push(left);}if(right){que.push(right);}}average.push_back(sum / size);}return average;}
};

二叉树层序遍历

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;queue<TreeNode* > que;if(!root){return res;}que.push(root);while(!que.empty()){vector<int> temp;int size = que.size();for(int i=0; i<size; i++){TreeNode* node = que.front();que.pop();temp.push_back(node->val);TreeNode* left = node->left;TreeNode* right = node->right;if(left){que.push(left);}if(right){que.push(right);}}res.push_back(temp);}return res;}
};

删除有序数组中的重复项

一个有序数组nums,原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。

必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int left = 0;int right = 0;int n = nums.size();int count = 0;int sum = 0;while (right < n) {if (nums[left] == nums[right]) {count++;right++;} else {if (count > 1) {nums[++left] = nums[left];sum += 2;} else {sum += 1;}nums[++left] = nums[right++];count = 1;}}if (count > 1) {nums[++left] = nums[left];sum += 2;} else {sum += 1;}return sum;}
};

轮转数组

给定一个整数数组nums,将数组中的元素向右轮转k个位置。

class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();k = k % n;reverse(nums.begin(), nums.end());reverse(nums.begin(), nums.begin()+k);reverse(nums.begin()+k, nums.end());}
};

买卖股票的最佳时机

class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;int price = prices[0];for(int i=1; i<prices.size(); i++){if(prices[i] > price){result = max(result, prices[i] - price);}else{price = prices[i];}}return result;}
};

买股票的最佳时机二

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();vector<vector<int>> dp(n,vector<int>(2)); //dp[i][0]第i天没有股票dp[0][0] = 0;dp[0][1] = -prices[0];for(int i=1; i<n; i++){dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i]);}return dp[n-1][0];}
};

跳跃游戏

给一个非负整数组nums,最初位于数组第一个下标,数组中每个元素代表可以跳跃的最大长度。
判断是否能跳到最后一个下标。

贪心
对于数组中任意一个位置y,只要存在一个位置x,它本身可以到达,并且x + nums[x] ≥ y,那么y也可以到达。

对于每一个可到达的位置x,它使得x+1,x+2,…,x+nums[x]这些连续的位置可以到达。

class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size();int rightmost = 0;for(int i=0; i<n; i++){if(i <= rightmost){rightmost = max(rightmost, i+nums[i]);if(rightmost >= n-1){return true;}}}return false;}
};

Z字形变换

给定一个字符串s,根据给定的行数numRows,以上往下,从左到右进行z字形排列。

在这里插入图片描述
利用二维矩阵模拟
设n为字符串s的长度,r = numRows,对于r=1(只有一行),或者r >= n(只有一列的情况),答案与s相同,可以直接返回。

其余情况,考虑创建一个二维矩阵,然后在矩阵上按Z字形填写字符串s,最后逐行扫描矩阵中的非空字符,组成答案。

根据题意,当我们在矩阵上填写字符时,会向下填写r个字符,然后向右上填写r-2个字符,最后回到第一行,因此Z字形变换周期t = r + r - 2 = 2r - 2。 每个周期会占用矩阵上的1+r-2 = r-1列。

共有n/t个周期乘上列数,等于矩阵的列数。

创建一个r行c列的矩阵,然后遍历字符串并按Z字形填写。

class Solution {
public:string convert(string s, int numRows) {int n = s.length(), r = numRows;if(r == 1 || r >= n){return s;}//变换周期int t = 2*r - 2;int c = (n + t -1) / t * (r - 1);//创建二维字符串vector<string> mat(r, string(c, 0));for(int i = 0, x = 0, y =0; i<n; i++){mat[x][y] = s[i];if(i % t < r - 1){++x; //向下移动}else{--x;++y; //向右上移动}}string ans;for(auto &row : mat){for(char ch : row){if(ch){ans += ch;}}}return ans;}
};

反转字符串中的单词

class Solution {
public:vector<string> splitString(string s){istringstream iss(s);vector<string> res;string word;while(iss >> word){res.push_back(word);}return res;}string reverseWords(string s) {vector<string> words = splitString(s);string res;for(int i=words.size()-1; i>=0; i--){res += words[i] + " ";}res.pop_back();return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225628.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

中职网络安全B模块Cenots6.8数据库

任务环境说明&#xff1a; ✓ 服务器场景&#xff1a;CentOS6.8&#xff08;开放链接&#xff09; ✓ 用户名&#xff1a;root&#xff1b;密码&#xff1a;123456 进入虚拟机操作系统&#xff1a;CentOS 6.8&#xff0c;登陆数据库&#xff08;用户名&#xff1a;root&#x…

第一次坐火车/高铁,如何坐?全流程讲解

第一次坐动车注意事项 第一次乘动车流程&#xff1a;进站→安检→候车厅→找检票口→过闸机→站台候车→找车厢→上车找座→下车→出站 乘车流程 一、进火车站/高铁站&#xff1a;刷购票证件原件进站 1、自助闸机刷证&#xff1a;身份证 2、人工通道&#xff1a;护照、临时…

从两眼放光到心碎一地《长相思》第二季搞笑爱情转折

这《长相思》第二季的剧情&#xff0c; 简直是心脏按摩器升级版啊&#xff01; 爷爷一开口&#xff0c;要给玱玹安排馨悦当王后 我这小心脏差点就跟着‘嘭’一声 "哎呀&#xff0c;以为要上演宫廷版《速度与激情》 结果小夭女神一出手&#xff0c; 不是醋坛子翻&#…

[C++]——同步异步日志系统(3)

同步异步日志系统 一、日志系统框架设计1.1模块划分1.1.1 日志等级模块1.1.2 日志消息模块1.1.3 日志消息格式化模块1.1.4 日志落地模块&#xff08;日志落地的方向是工厂模式&#xff09;1.1.5 日志器模块&#xff08;日志器的生成是建造者模式&#xff09;1.1.6 异步线程模块…

速度太慢,跑个分试试:AI语言模型和API性能对比;开源的高质量PDF,DOC提取工具;斯坦福TTT代码实现

✨ 1: Artificial Analysis AI语言模型和API提供商的比较分析&#xff0c;帮助用户选择最佳方案。 Artificial Analysis 是一个专门独立分析AI语言模型和API提供商的平台&#xff0c;旨在帮助用户了解AI领域并选择最适合其需求的模型和API提供商。以下是该平台的主要内容和功…

无法加载文件 xxxx 因为在此系统上禁止运行脚本。有关详细信息,请参阅,Windows执行策略有关问题

无法加载文件 xxxx 因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅&#xff0c;Windows执行策略有关问题 1.1 出现问题 在Windows11中的Windows PowerShell执行一些前端的命令时经常会出现如下问题&#xff1a; PS C:\Users\Admin\Desktop> vue init webpa…

QListWidget、QTreeWidget、QTableWidget的拖放

QListWidget、QTreeWidget、QTableWidget的拖放实验 QAbstractItemView::DragDropMode 的枚举值 QAbstractItemView::NoDragDrop0组件不支持拖放操作QAbstractItemView::DragOnly1组件只支持拖动操作QAbstractItemView::DropOnly 2组件只支持放置操作QAbstractItemView::DragDr…

UI Toolkit generateVisualContent的使用

方法描述: Called when the VisualElement visual contents need to be (re)generated. When this delegate is handled, you can generate custom geometry in the content region of the VisualElement. For an example, see the MeshGenerationContext documentation. This…

职业本科计算机网络实训室

一、职业本科计算机网络实训室建设的背景 随着数字化时代的深入发展&#xff0c;计算机网络技术已经渗透到社会的每一个角落&#xff0c;成为推动社会进步的重要力量。在《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》中&#xff0c;建设数字中国…

统信UOS软件包标识化工具deepin-sbom-tools使用

原文链接&#xff1a;统信UOS上使用软件包标识化工具deepin-sbom-tools Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS上使用软件包标识化工具deepin-sbom-tools的文章。deepin-sbom-tools是一个强大的工具&#xff0c;可以帮助开发者和系统管理员更好…

保密U盘仍然存在数据安全危机?该怎么用才能规避?

保密U盘以前主要用于国家涉密单位或部门&#xff0c;但随着人们对于信息安全的重视越来越高&#xff0c;在民用企事业单位以及个人用户方面也应用得日益广泛。 使用保密U盘在安全性上比普通U盘具有优势&#xff0c;但却仍然存在安全危机&#xff0c;具体为&#xff1a; 病毒和…

Linux开发板(正点原子阿尔法_IMX6U)QT5.12.9交叉编译到ARM开发板(已解决)

问题记录&#xff1a;Qt下ctrlR直接构建项目&#xff0c;然后在build-01_led-Desktop_Qt_5_12_9_GCC_64bit-Debugz中将构建的执行文件&#xff0c;scp到ARM开发板下&#xff0c;发现通过指令./01_led后出现以下报错。 问题原因&#xff1a;因为Qt构建默认使用的是64bit的gcc&am…

【Linux】vim详解

1.什么是vi/vim? 简单来说&#xff0c;vi是老式的文本编辑器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具&#xff0c;就连 vim的官方网站&#xff08; http://www.vim.org&#xff09;自己也说vim是一…

matlab 卷积和多项式乘法

目录 一、算法原理1、原理概述2、主要函数二、代码实现1、通过卷积计算多项式乘法2、向量卷积3、卷积的中心部分三、参考链接一、算法原理 1、原理概述 两个向量 u u u和 v v v的卷积,表示

前端面试题36(js栈和堆)

在JavaScript中&#xff0c;内存管理是自动进行的&#xff0c;主要通过栈(stack)和堆(heap)两种方式来分配和管理内存。理解这两者对于深入学习JavaScript以及优化代码性能非常关键。 栈 (Stack) 栈是一种后进先出&#xff08;Last In, First Out, LIFO&#xff09;的数据结构…

2024年【熔化焊接与热切割】考试报名及熔化焊接与热切割作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【熔化焊接与热切割】考试报名及熔化焊接与热切割作业考试题库&#xff0c;包含熔化焊接与热切割考试报名答案和解析及熔化焊接与热切割作业考试题库练习。安全生产模拟考试一点通结合国家熔化焊接与热切割考试…

确保智慧校园安全,充分利用操作日志功能

智慧校园基础平台系统的操作日志功能是确保整个平台运行透明、安全及可追溯的核心组件。它自动且详尽地记录下系统内的每一次关键操作细节&#xff0c;涵盖操作的具体时间、执行操作的用户账号、涉及的数据对象&#xff08;例如学生信息更新、课程调度变动等&#xff09;、操作…

关于Python的类的一些理解

才发现python的类对象只能调用类方法 我想使用对类对象a使用系统调用的len方法就会报错 2.类对象a是什么&#xff1f; 答&#xff1a;是所有的带有self的成员变量 举例说明&#xff1a;红色的就是a里面的东西 class A:def __init__(self,data):self.datadataself.b1self.d{a…

ipad怎样录屏?一看就会的详细步骤

随着iPad功能的日益强大&#xff0c;屏幕录制已成为许多用户在日常工作、学习和娱乐中的必备技能。无论是记录操作步骤、分享游戏精彩瞬间&#xff0c;还是制作教学视频&#xff0c;屏幕录制都发挥着不可或缺的作用。这时可能会有人疑问&#xff0c;ipad怎样录屏呢&#xff1f;…

利用SpringBoot+rabbitmq 实现邮件异步发送,保证100%投递成功

在之前的文章中&#xff0c;我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务。 但是这类服务通常不稳定&#xff0c;当出现网络异常的时候&#xff0c;会导致邮件推送失败。 本篇文章将介绍另一种高可靠的服务架构&#xff0c;实现邮件 100% 被投递成功。类…