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://www.mzph.cn/bicheng/44095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模块化与包管理】:解锁【Python】编程的高效之道

目录 1.什么是模块&#xff1f; 2. 模块的导入过程 3. 理解命名空间 4. import语句的多种形式 5. 模块的执行与重新导入 6. 包&#xff08;Package&#xff09; 7. sys模块和os模块 sys模块 常用属性 示例&#xff1a;使用sys模块 os模块 常用功能 示例&#xff1…

【鸿蒙学习笔记】使用动画

官方文档&#xff1a;使用动画 目录标题 属性动画&#xff1a;通用属性发生改变时而产生的属性渐变效果animationanimateTo自定义属性动画 AnimatableExtend 转场动画&#xff1a;是页面或组件的切换动画 , 显示/隐藏 切换时的动画出现/消失转场&#xff1a;实现一个组件出现或…

【Superset】dashboard 自定义URL

URL设置 在发布仪表盘&#xff08;dashboard&#xff09;后&#xff0c;可以通过修改看板属性中的SLUG等&#xff0c;生成url 举例&#xff1a; http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式&#xff1a;此处参考了官…

SolidWorks滚花螺栓制作-cnblog

目标 规划基准图形 确定尺寸&#xff0c;单位mm 我 对固定好的图形进行旋转 倒角 设置螺纹 注意改变深度为15mm 收尾位置补全 滚花 建立基准面 制作多边形 添加穿透 扫描切除 圆周阵列 成品完成

【深度学习】手动完成线性回归!

&#x1f34a;嗨&#xff0c;大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; )&#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙&#xff1a;一个帮助编程小…

现代码头装卸系统:技术创新与效率提升

引言 码头装卸系统在全球贸易和物流链中扮演着至关重要的角色。随着全球化进程的加快&#xff0c;国际贸易量不断增加&#xff0c;港口作为货物进出主要枢纽&#xff0c;其装卸效率直接影响到整个物流链的运作效率和成本。一个高效、现代化的码头装卸系统不仅能提高港口的货物处…

JVM是如何创建一个对象的?

哈喽&#xff0c;大家好&#x1f389;&#xff0c;我是世杰。 本文我为大家介绍面试官经常考察的**「Java对象创建流程」** 照例在开头留一些面试考察内容~~ 面试连环call Java对象创建的流程是什么样?JVM执行new关键字时都有哪些操作?JVM在频繁创建对象时&#xff0c;如何…

JVM垃圾回收器详解

垃圾回收器 JDK 默认垃圾收集器&#xff08;使用 java -XX:PrintCommandLineFlags -version 命令查看&#xff09;&#xff1a; JDK 8&#xff1a;Parallel Scavenge&#xff08;新生代&#xff09; Parallel Old&#xff08;老年代&#xff09; JDK 9 ~ JDK20: G1 堆内存中…

CVE-2024-6387Open SSH漏洞彻底解决举措(含踩坑内容)

一、漏洞名称 OpenSSH 远程代码执行漏洞(CVE-2024-6387) 二、漏洞概述 Open SSH是基于SSH协议的安全网络通信工具&#xff0c;广泛应用于远程服务器管理、加密文件传输、端口转发、远程控制等多个领域。近日被爆出存在一个远程代码执行漏洞&#xff0c;由于Open SSH服务器端…

2024年夏季德旺杯数学素养水平测试

此为小高组的测试&#xff0c;不过德旺杯主要看获奖情况&#xff0c;选择学员入营

基于考研题库小程序V2.0实现倒计时功能板块和超时判错功能

V2.0 需求沟通 需求分析 计时模块 3.1.1、功能描述←计时模块用于做题过程中对每一题的作答进行30秒倒计时&#xff0c;超时直接判错&#xff0c;同时将总用时显示在界面上;记录每次做题的总用时。 3.1.2、接口描述←与判定模块的接口为超时判定&#xff0c;若单题用时超过 …

人工智能和机器学习 (复旦大学计算机科学与技术实践工作站)20240703(上午场)人工智能初步、mind+人脸识别

前言 在这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;无一不彰显着AI的强大潜力。而人脸识别技术作为AI领域的一项重要应用&#xff0c;更是以其高效、便捷的特点受到了…

萤石揽获2024葵花奖17项重磅大奖 登顶荣誉之巅

7月9日&#xff0c;第八届葵花奖智能家居评选颁奖盛典在中国建博会&#xff08;广州&#xff09;广交会展馆隆重举行。萤石共斩获横跨智能锁、智能家居摄像机、智能清洁、全屋智能以及物联网云平台等多个领域的17项大奖&#xff0c;创下行业最多记录&#xff0c;并问鼎金至尊奖…

记录|C#安装+HslCommunication安装

记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022&#xff0c;跳转下…

华为机试HJ106字符逆序

华为机试HJ106字符逆序 题目&#xff1a; 想法&#xff1a; 将输入的字符串倒叙输出即可 input_str input()print(input_str[::-1])

二十年大数据到 AI,图灵奖得主眼中的数据库因果循环

最近&#xff0c;MIT 教授 Michael Stonebraker 和 CMU 教授 Andrew Pavlo (Andy) 教授联合发表了一篇数据库论文。Michael Stonebraker 80 高龄&#xff0c;是数据库行业唯一在世的图灵奖得主&#xff0c;Andy 则是业界少壮派里的最大 KOL。 一老一少&#xff0c;当今数据库届…

MVC架构

MVC架构 MVC架构在软件开发中通常指的是一种设计模式&#xff0c;它将应用程序分为三个主要组成部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分层结构有助于组织代码&#xff0c;使…

钡铼技术有限公司S270用于智慧物流中心货物追踪与调度

钡铼技术有限公司的第四代S270是一款专为智慧物流中心设计的工业级4G远程遥测终端RTU&#xff0c;其强大的功能和灵活性使其成为货物追踪与调度的理想选择。 技术规格和功能特点 钡铼S270支持多种通信协议&#xff0c;包括短信和MQTT&#xff0c;这使得它能够与各种云平台如华…

图论---匈牙利算法求二分图最大匹配的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 求解二分图最大匹配问题的算法&#xff0c;寻找一个边的子集&#xff0c;使得每个左部点都与右部点相连&#xff0c;并且没有两条边共享…

【STM32学习】cubemx配置,串口的使用,串口发送接收函数使用,以及串口重定义、使用printf发送

1、串口的基本配置 选择USART1&#xff0c;选择异步通信&#xff0c;设置波特率 选择后&#xff0c;会在右边点亮串口 串口引脚是用来与其他设备通信的&#xff0c;如在程序中打印发送信息&#xff0c;电脑上打开串口助手&#xff0c;就会收到信息。 串口的发送接收&#xff0…