
C++面试宝典
文章平均质量分 81
本专栏将介绍C++面试中的常见经典试题,包括:LeetCode、NowCoder等算法学习网站上的经典试题,华为、腾讯、阿里、字节、百度、比亚迪等大厂的经典试题,笔者工作中总结的一些非常有实战价值的面试题等。通过对这些经典试题抽丝剥茧般的深入剖析和讲解,帮你快速提高专业技能,大幅提升面试能力。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
希望_睿智
中国科学技术大学毕业,专注于音视频领域近二十年,全网访问量近500万,粉丝近10万。在嵌入式开发、运营级平台、音视频编解码、视频图像处理、流媒体、深度学习、人工智能等多个方向具备实战开发经验和技术积累,共发表发明专利十余项,软件著作权几十项。商务合作和推广,可私信联系。
展开
-
C++面试宝典第1题:爬楼梯
通过这道题,我们学会了用递归算法和动态规划算法来编程处理问题。递归算法的时间复杂度较高,动态规划算法的时间复杂度较低。学习了上面的示例代码后,你真的理解递归算法和动态规划算法了吗?我们为你留了一些课后的拓展作业,快来试一试吧!1、小乐爬楼梯,一次只能上1级台阶,或者2级台阶,或者3级台阶。楼梯一共有n级台阶,请问总共有多少种方法可以爬上楼?2、有长宽分别为1x1和1x2的小格子,现在要用这两种小格子拼接成1xN的大格子。原创 2023-12-04 07:00:00 · 1366 阅读 · 17 评论 -
C++面试宝典第2题:逆序输出整数
通过这道题,我们学会了如何更全面、更仔细地思考问题。严谨是一个软件开发工程师的必备素质,我们在平时的编程过程中,就应当养成严谨的好习惯。另外,我们还为你留了一些课后的拓展作业,快来试一试吧!1、有两个字符串s和t,请编写一个方法,查找字符串t在字符串s中出现的最左边的位置;如果在s中没有与t匹配的子串,则返回-1。原创 2023-12-05 07:00:00 · 1122 阅读 · 26 评论 -
C++面试宝典第3题:找不同的数
通过这道题,我们学习了异或运算的特点,并利用该特点,找出了数组中不同的数。在第二道小题中,我们采用了“分而治之”的思想,将原数组从逻辑上划分成了两个数组,从而顺利找到了两个不同的数。原创 2023-12-08 07:00:00 · 981 阅读 · 27 评论 -
C++面试宝典第4题:合并链表
链表是一种常见的数据结构,它通过指针链接一系列的节点。通过这道题,我们学习了链表的数据结构,以及链表合并的操作。另外,我们还为你留了一些课后的拓展作业,快来试一试吧!1、给定一个单向链表,判断链表中是否有环。2、给定一个单向链表的头节点,写一个函数将其反转。原创 2023-12-11 06:00:00 · 825 阅读 · 21 评论 -
C++面试宝典第5题:判断素数
通过这道题,我们学习了判断一个正整数是否为素数的若干方法。既有历史悠久的埃拉托斯特尼筛法,也有常用的遍历法。在遍历法的基础上,我们利用素数的分布规律,对算法进行了优化,提升了其运行效率,降低了其时间复杂度。原创 2023-12-13 06:00:00 · 1211 阅读 · 24 评论 -
C++面试宝典第6题:访问数组和联合体元素
在本题中,我们学习了数组、指针、联合体及内存布局相关的知识。通过这道面试题,你真的理解内存布局相关的知识了吗?我们为你留了一些课后的拓展作业,快来试一试吧!1、仔细阅读下面的代码,并给出程序的输出。int b1: 5;int b2: 2;}AA;AA aa;原创 2023-12-18 06:00:00 · 669 阅读 · 12 评论 -
C++面试宝典第7题:重载自增自减运算符
在本题中,我们学习了如何重载前缀++、前缀--、后缀++、后缀--等运算符。前缀++和前缀--先进行加法减法运算,然后返回结果。后缀++和后缀--先返回变量的当前值,然后再进行加法减法运算。在使用这些操作符时,需要仔细考虑它们的行为,避免误用而导致的逻辑错误等问题。原创 2023-12-18 09:00:00 · 848 阅读 · 22 评论 -
C++面试宝典第8题:自定义字符串类
在本题中,我们学习并实际使用了普通构造函数、拷贝构造函数、析构函数和赋值函数,加深了对这些函数的理解。同时,我们还讲解了浅拷贝、深拷贝、内存分配与释放等相关知识。希望大家能从本题中学习到面向对象编程的一些基本概念,并熟练运用到项目中。原创 2023-12-20 06:00:00 · 1602 阅读 · 27 评论 -
C++面试宝典第9题:找出第K大元素
通过这道题,我们学习了快速选择算法。快速选择算法是一种基于快速排序的算法,用于在未排序的数组中找到第K大或者第K小的元素。它的平均时间复杂度为O(n),最坏情况下的时间复杂度为O(n^2)。与快速排序算法类似,快速选择算法是一种原地算法,不需要额外的存储空间。学习了上面的示例代码后,你真的理解快速选择算法了吗?我们为你留了一些课后的拓展作业,快来试一试吧!1、给定一个无序的整数数组和一个目标整数值,求出数组中比目标整数值小的元素个数,要求时间复杂度为O(n)。原创 2023-12-25 06:00:00 · 1591 阅读 · 23 评论 -
C++面试宝典第10题:绘制各种图形
在本题中,我们学习了C++面向对象编程中涉及的各种知识,包括:基类、派生类、构造函数、虚析构函数、纯虚函数等。面向对象编程是一种编程范式,它将数据和操作封装在对象中,通过类和继承来实现代码重用和多态性。原创 2023-12-27 06:00:00 · 1610 阅读 · 21 评论 -
C++面试宝典第11题:两数之和
通过这道题,我们对算法的时间复杂度和空间复杂度有了一定的理解。时间复杂度和空间复杂度并不是完全独立的两个概念,虽然它们衡量的是算法效率的不同方面,但在实际应用中,这两个因素有时会相互制约,形成一种“时间-空间”的平衡。比如:对于某些问题,使用一种时间复杂度较低的算法可能需要更多的空间来存储中间结果或额外的数据结构,而使用一种空间复杂度较低的算法可能会牺牲一些时间效率。然而,时间复杂度和空间复杂度并不是矛盾的。它们分别衡量算法在不同方面的效率,可以同时达到最优。原创 2023-12-29 06:00:00 · 2032 阅读 · 22 评论 -
C++面试宝典第12题:数组元素相除
通过这道题,我们可以看出:问题简单,并不代表不需要全面思考。不全面思考,后果很严重,你的代码中到处都可能充斥着漏洞和bug。原创 2024-01-01 11:21:41 · 1010 阅读 · 9 评论 -
C++面试宝典第13题:计算餐厅账单
通过这道题,我们学习了面向对象的程序设计方法。面向对象程序设计(英文全称为:Object-Oriented Programming,简称为:OOP)是一种程序设计范型,它将对象作为程序的基本组成单元。在C++中,面向对象程序设计方法主要涉及以下几个核心概念。类:类是一种用户自定义的数据类型,用于封装数据和方法。对象:对象是类的实例。在C++中,使用new关键字创建类的对象。封装:封装是隐藏对象的内部状态并防止直接访问的一种机制。原创 2024-01-01 11:25:40 · 1907 阅读 · 18 评论 -
C++面试宝典第14题:结构体和位域对齐
通过这道题,我们学习了结构体对齐、位域对齐、内存对齐等相关的知识。在进行协议设计,特别是通信层的协议设计时,往往会涉及到大量的数据结构,此时就需要考虑结构体的字节对齐问题。理解内存对齐对于优化性能、减少内存占用、提高代码的可移植性都是很重要的。在使用C++进行底层编程或与硬件交互时,这是一个非常重要和关键的概念。原创 2024-01-06 19:29:35 · 1261 阅读 · 21 评论 -
C++面试宝典第15题:最长回文子串
通过这道题,我们学习了最长回文子串的三种解法,分别为:暴力求解法、动态规划法和中心扩展算法。实际上,还有一种效率更高的Manacher算法,其时间复杂度为O(n)。大家可以自行去了解,这里就不再赘述了。原创 2024-01-08 07:00:00 · 830 阅读 · 18 评论 -
C++面试宝典第16题:盛最多水的容器
通过这道题,我们学习了双指针法。双指针法是一种常见的算法思想,通常用于处理数组、链表等数据结构中的问题。双指针法的优点在于其时间复杂度比较低,为O(n),其中,n为容器数量。同时,双指针法也非常易于理解和实现。原创 2024-01-09 07:00:00 · 905 阅读 · 19 评论 -
C++面试宝典第17题:找规律填数
找规律填数是一种常见的数学问题,要求应聘者通过观察和分析数字序列,找出其中的规律,并预测下一个数字。这类题目可以考察应聘者的逻辑思维能力、推理能力和数学素养,在面试中还是比较常见的。在解决这类题目时,不要执拗于固有思维是非常重要的。首先,要学会观察和分析数字序列或图形序列,找出其中的规律。有时候规律可能比较明显,但有时候可能需要深入思考和分析才能发现。其次,在找规律的过程中,要保持开放的心态,不要局限于某一种思维方式或解题方法。有时候可以从不同的角度来思考问题,或者尝试使用不同的方法来解决问题。原创 2024-01-10 07:00:00 · 1733 阅读 · 9 评论 -
C++面试宝典第18题:旋转数组
一个问题的解决方案可能远不止一种,正所谓“条条大路通罗马”,如何在众多解决方案中找出最优解,实际上非常考验软件开发工程师的综合能力。从多个角度、多个维度分析和思考问题,是一种非常有效的思维方式,可以帮助我们更全面地理解问题,并找到更好更优的解决方案。原创 2024-01-11 07:00:00 · 875 阅读 · 18 评论 -
C++面试宝典第19题:最长公共前缀
通过这道题,我们学习了横向扫描法、纵向扫描法和分治法。横向扫描法也称为宽度优先搜索(BFS)方法,纵向扫描法也称为竖直扫描法或深度优先搜索(DFS)方法,两种方法扫描的方式有所不同。分治法则是一种通用的算法设计技术,可以应用于各种问题,其时间复杂度取决于问题的具体情况。原创 2024-01-15 07:00:00 · 1384 阅读 · 14 评论 -
C++面试宝典第20题:计算岛屿数量
在这道题中,我们学习了深度优先搜索算法和广度优先搜索算法。深度优先搜索(DFS):在DFS中,从起始节点开始,尽可能深地探索路径,直到找到目标状态或者无法继续前进为止。在此过程中,一旦到达一个新节点,就首先检查该节点是否为目标节点。如果不是,则访问其未被访问过的邻接节点。广度优先搜索(BFS):在BFS中,同样从起始节点出发,但首先访问所有与起始节点距离为1的节点,然后是距离为2的节点。依此类推,直至找到目标状态,或遍历完整个可达部分。原创 2024-01-16 07:00:00 · 811 阅读 · 18 评论 -
C++面试宝典第21题:字符串解码
栈作为一种基础数据结构,在计算机科学和软件开发中有着广泛的应用。栈的典型应用场景有:函数调用栈、表达式求值与逆波兰表示法、括号匹配问题、深度优先搜索、程序语言解析与词法分析等。总之,栈因其“后进先出”的特性,在需要维持顺序关系、进行递归或层次结构处理的场景中,都扮演着至关重要的角色。实际上,这道题还可以通过递归的方式来实现,大家可以试一试。原创 2024-01-17 07:00:00 · 831 阅读 · 22 评论 -
C++面试宝典第22题:买卖股票的最佳时机
通过这道题,我们学习了暴力法、贪心算法、动态规划算法在解决买卖股票问题时的解题思路。但是,你真的理解透彻了吗?下面是一道关于买卖股票问题的扩展题,快来试一下吧!给定一个整型数组,它的第i个元素是一支给定股票第i天的价格。如果不限制交易次数,设计一个算法来计算你所能获取的最大利润。注意:你不能同时参与多笔交易(你必须在再次购买前,出售掉之前所有的股票,且不能在卖出股票后的同一天再买入股票)。输入: [7, 1, 5, 3, 6, 4]输出: 7。原创 2024-01-22 07:00:00 · 822 阅读 · 24 评论 -
C++面试宝典第23题:乌托邦树
通过这道题,我们学会了如何将植物生长的过程抽象成数学模型,并通过逻辑推理来确定任意年份后乌托邦树的高度。此外,我们还对代码进行了优化,使用位移操作来避免循环和遍历,有效提升了程序的运行效率。原创 2024-01-23 07:00:00 · 687 阅读 · 21 评论 -
C++面试宝典第24题:袋鼠过河
通过解决袋鼠过河问题,不仅可以深化对动态规划的理解和应用,还能提升面对具有复杂约束条件的实际问题时分析和解决问题的能力。在实践中,算法的选择取决于问题的具体细节和约束条件。原创 2024-01-24 07:00:00 · 1086 阅读 · 17 评论 -
C++面试宝典第25题:阶乘末尾零的个数
遇到一个题目或做一个项目时,需要我们先针对问题进行分析,而不是盲目地开始编码实现,或者一边写代码一边思考。如何深入思考问题的本质,如何找到问题的最优解,非常考验软件开发工程师的数学分析能力和逻辑思维能力。原创 2024-01-29 08:51:32 · 674 阅读 · 22 评论 -
C++面试宝典第26题:螺旋矩阵
在解决螺旋矩阵问题时,有以下两点需要特别注意。1、边界条件检查:在实际编程中,需要仔细处理边界条件,避免越界访问数组。2、空间复杂度优化:如果仅要求输出螺旋顺序,而不需要存储完整的矩阵,则可以直接操作原数组,避免额外的空间开销。3、动态大小:上述示例代码已支持任意大小的正方形矩阵,对于非正方形矩阵,可以稍作修改以适应不同行数和列数的情况。螺旋矩阵问题不仅锻炼了C/C++程序员对二维数组的理解和操控能力,还展示了如何通过递归或迭代的方式来解决问题。原创 2024-02-02 09:00:00 · 579 阅读 · 31 评论 -
C++面试宝典第27题:完全平方数之和
这道题主要运用动态规划方法来解决一个具有重叠子问题和最优子结构的问题,同时结合了对完全平方数特性的理解和一些数学运算技巧。具体的的知识点主要包括如下几点。1、动态规划 (Dynamic Programming)。这是解决此问题的关键算法思想。通过定义一个动态规划数组dp,其中dp[i]表示组成数字i所需的最小完全平方数个数,利用子问题的最优解来构建原问题的最优解。2、数学性质。完全平方数:整数可以通过自身相乘得到的数。3、循环优化。原创 2024-02-08 21:10:53 · 1174 阅读 · 27 评论 -
C++面试宝典第28题:寻找丢失的数字
这道题目的核心是找出一个整数数组中缺失的、在指定区间[1, n]内的数字。题目保证了数组中的每个元素都在这个区间内,但至少有一个数字没有出现。解题思路主要有两种:哈希表法和原地修改法。两种方法的时间复杂度都为O(n),哈希表法的空间复杂度为O(n),原地修改法则不使用额外的空间。原创 2024-02-18 07:00:00 · 705 阅读 · 20 评论 -
C++面试宝典第29题:sizeof使用大全
在本题中,我们考察了应聘者对sizeof在各种使用场景下的深入理解。需要特别注意的一点是:sizeof在编译阶段就能确定结果,而不是在运行时。学习了本题后,你真的弄懂sizeof了吗?我们为你留了一些课后的拓展作业,快来试一试吧!给出下面代码段的输出值。原创 2024-02-19 07:00:00 · 277 阅读 · 13 评论 -
C++面试宝典第30题:分发饼干
本题是贪心算法应用的一个经典问题,非常值得应聘者去深入学习。通过贪心策略,我们可以保证在每一步选择中都能达到局部最优解,最终得到全局最优解,即最大化满足的孩子数量。本题算法的时间复杂度主要由排序操作和双指针遍历两部分组成。排序操作:对于两个数组的排序,假设每个数组大小为n,则排序的时间复杂度通常为O(nlogn)。这里我们使用了C++标准库中的sort函数,其平均时间复杂度是这个级别。双指针遍历。原创 2024-02-20 07:00:00 · 728 阅读 · 20 评论 -
C++面试宝典第31题:有效的数独
在上面优化后的方法中,我们通过遍历一次数独,并使用哈希集合来跟踪已经出现的数字。该方法的时间复杂度为O(1),因为数独的大小是固定的9 x 9,所以无论数独中有多少填充的数字,检查每个单元格的操作都是固定次数的。该方法的空间复杂度为O(1),因为我们只是使用了固定大小的集合和向量来存储每行、每列和每个小九宫格中出现的数字。原创 2024-02-22 07:00:00 · 799 阅读 · 26 评论 -
C++面试宝典第32题:零钱兑换
在上面的示例代码中,我们通过两层循环确定了如何从较小的金额逐步构建到较大金额的过程。同时,利用了动态规划的思想,保证了每次计算都是基于之前已经计算出的最优解来进行更新,从而最终得到所需的最少硬币个数。该解决方案的时间复杂度为:O(amount * number_of_coins),空间复杂度为:O(amount)。原创 2024-02-27 07:00:00 · 1004 阅读 · 23 评论 -
C++面试宝典第33题:数组组成最大数
本题示例代码的实现采用了自定义排序方法,对字符串数组进行排序,然后依次拼接成字符串得到最大整数。这种方法简洁高效且易于理解,是解决该问题的主流做法。尽管我们在比较函数中做了一些额外的工作,但这只是一个常数因子。所以,总的时间复杂度是由排序算法决定的,在C++中一般为O(nlogn)。另外,我们使用了额外的空间去保存nums的字符串形式数组,故总的空间复杂度为O(n)。原创 2024-02-29 07:00:00 · 788 阅读 · 30 评论 -
C++面试宝典第34题:整数反序
综上所述,本题综合考察了C++语言中整数与字符串相互转换、循环结构、条件逻辑控制、字符串遍历以及基本的用户交互功能,是一道涵盖基础编程技巧和逻辑思维的典型题目。原创 2024-03-04 07:00:00 · 783 阅读 · 23 评论 -
C++面试宝典第35题:滑动窗口最大值
这道题主要考察了滑动窗口问题的求解方法,特别是如何使用双端队列来优化窗口内最大值的查找效率。通过比较暴力求解法和双端队列法,我们可以更好地理解不同算法在时间复杂度和空间复杂度上的优劣,并选择最适合问题的方法来解决。原创 2024-03-18 07:00:00 · 573 阅读 · 19 评论 -
C++面试宝典第36题:骑士游历
上面的示例代码仅实现了基本的遍历功能,并且在找到第一个解决方案后就停止搜索。在实际问题中,可能会需要找到所有可能的解决方案,或者处理无解的情况。此外,对于较大的棋盘尺寸,回溯搜索可能会非常耗时,可以考虑采用更高级的搜索算法,比如:A*、IDA*等,并结合启发式信息来优化搜索过程。原创 2024-03-19 07:00:00 · 862 阅读 · 31 评论