C/C++
赛文X
九九六の神谕
展开
-
【剑指Offer | C++ 】面试题25:合并两个排序的链表 (双指针法 | 递归法)
题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是依照递增排序的。每次判断头节点(值小的),和尾部合并好的节点(明显的递归特诊)用两个指针指向两个链表不断比较大小并连接,需要记录返回合并后链表的当前节点,比较麻烦。原创 2023-02-26 21:50:15 · 273 阅读 · 1 评论 -
【剑指Offer | C++ 】面试题24:反转链表 (直接修改 | 递归修改)
给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。最后让修改好的节点接上首节点,首节点next赋空即可。递归法:当前节点和剩余节点的修改。直接修改法:直接遍历每个节点。递归修改除首节点外的其他节点。将节点next指向上一节点。原创 2023-02-24 11:03:54 · 261 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题23:链表中环的入口节点
如果一个链表中包含环,设计一个函数找出环的入口节点。原创 2023-02-21 13:50:11 · 231 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题22:链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。unsigned int 中的 0 减一后变为最大值(一个周期)给定一个链表: 1->2->3->4->5, 和 k = 2.简单的双指针问题,但是此时C++要考虑防御性编程问题。原创 2023-02-19 22:03:26 · 245 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题21:调整数组顺序使奇数位于偶数前面 | 按照一定的规则调整数组
题目: 输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,偶数位于数组的后半部分。C++ 使用函数指针来作为函数的参数。[返回类型] (*指针名)(参数列表)维护前后两个指针指向要交换的两个数。引用自chatGPT插件。原创 2023-02-18 12:10:45 · 104 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题20:表达数值的字符串
实现一个函数用来判断字符串是否表示数值(包括整数和小数以及使用科学计数法表示的数)。其中d为整数,[]表示出现0到任意次,|表示出现前后的字母都可以。原创 2023-02-12 11:39:33 · 161 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题19:正则表达式匹配
例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。模式中的字符’.‘表示任意一个字符,而’*'表示它前面的字符可以出现任意次(含0次)。题目:请实现一个函数用来匹配包含’. ‘和’*'的正则表达式。a* 可以匹配 “” 、 “a” 、 “aa…在本题中,匹配是指字符串的所有字符匹配整个模式。‘*’符号只能依靠递归来实现。'.'符号还可以直接匹配。原创 2023-02-12 09:53:38 · 167 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题18:删除链表的节点 | 删除链表中重复的节点
题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。2.中间节点,值赋后一节点,指向下下个节点,相当于取代后一节点。由于是C++解答,必须考虑到释放空间的问题。题目: 在O(1)的时间内删除链表节点。3.尾节点,必须找到前序节点才能安全删除。每当有重复的记忆前序节点即可。1.只有一个节点,删除节点。原创 2023-02-09 11:36:51 · 243 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题17:打印从 1 到 最大的 n 位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。由于计算机存储的数字有范围,需要使用字符串来进行模拟。递归可以用在全排列上(如果for循环则为O(n^3))模拟数位相加,需要处理进位的情况,从高位到地位逐步递归排列。递归到个位遍输出该数字。原创 2023-02-07 11:43:51 · 280 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题16:数值的整数次方
题目:实现函数double Power(double base,int exponent),求base得exponent次方。不得使用库函数,同时不需要考虑大数问题。看似简单,实则暗藏玄只因!次方考虑正数次方、负数次方、零次方正数正常算负数绝对值后算了再求倒数(分数首先考虑到分母为0,题中base可能为0)零次方直接返回1其中正常算可以考虑递归的O(logn)算法。原创 2023-01-11 21:56:11 · 153 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题15:二进制中1的个数 | 判断数字是否2的整数次方 | 两个二进制数的转换最小bit位
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。数字循环和1 进行与运算( & 1),可以判断数字的最后一位是否为1!①找到两者数字差别 -> 异或运算 (相当于标记两数不同的位为1)进行判断,只移动辅助数字,辅助数字移动统计数字的位数。如int为32位,辅助数字必须循环判断32位是否含1。每次将减一后的数字与原数字 与运算 便可得到。新方法能够每次把数字最右边的1变为0。数字一到数字二的数字变化数问题。,如果是,二进制1的个数必为1。原创 2023-01-10 22:14:07 · 238 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题14:剪绳子 ( 动态规划 + 贪婪)
题目:给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。动态规划基本上以空间换时间,也是一种情况的遍历。贪婪法相比动态规划每次的步骤都有一定的选择性。记得删除创建的变量!原创 2023-01-09 20:34:35 · 192 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题12 / 13:矩阵中的路径 (学习版回溯法) / 机器人的运动范围
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。寻找到路径的判断条件是没匹配到的路径为空,即pathStr到了末尾。为了优化代码,少进一层函数,可以在进入前添加判断,即。原创 2023-01-06 15:56:34 · 457 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题11:旋转数组中最小值(两个部分的指针思路 & 最小值在两个指针之间的思路)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4, 5, 1, 2}是数组{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。由于只有两个元素时,mid总是第一个元素,因此直接返回两个的最小值即可。如果等于p1的值或者小于都有可能在包含mid 的区间内。同理,如果找的是最大值就可以在这个情况下mid-1。,代表的是p1一直在第一部分的数组。思路:mid的值比p1大说明。肯定在mid+1及其。原创 2023-01-04 22:02:41 · 216 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题10.5:手写快速排序
Partition函数选中最后一个元素为基准,其他小于它的元素放前面。原创 2023-01-02 21:56:05 · 143 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题10:斐波那契数列 | 青蛙跳台阶问题
题目: 青蛙跳问题,青蛙可以一次跳 1~2 阶台阶,跳上n级台阶有多少跳法?其中如 f(3-1) 表示青蛙一次跳1阶加上跳。阶台阶,此时跳上n级台阶又多少种跳法?题目: 青蛙跳问题,青蛙可以一次跳。算f(2)、f(3)……题目: 求斐波那契梳理的第n项。拓展:求斐波那契数列的前N项和。其实就是模拟人手动计算的过程。原创 2023-01-02 11:28:27 · 462 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题9:用两个栈实现队列 | 用两个队列实现栈
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。this->无同名变量可省略。原创 2022-12-30 21:59:40 · 153 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题8:寻找二叉树的下一个节点 |上一个节点
题目算是比较新颖的了题解:拓展:寻求上一个节点跟上述思路相反:如果有左子树,即为左子树的最右子节点。如果无左子树,如果本身为父节点的的右子节点,即为父节点为父节点的左子节点,即为祖父节点原创 2022-12-04 16:37:13 · 293 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题7:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出的二叉树并输出它的头结点。原创 2022-12-04 14:47:58 · 399 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题6:替换空格
输入一个链表的头节点,从尾到头反过来打印出每个节点的值,不允许修改输入数据(不能改变链表的节构)。链表节点定义如下:原创 2022-12-03 09:57:35 · 484 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题5:替换空格
例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。第二次从后往前如果不是空格复制到末尾,如果是空格替换字符。请实现一个函数,将一个字符串中的空格替换成“%20”。第一次查找空格数得到处理后的字符长度。...原创 2022-07-17 08:46:00 · 286 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题4:二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。的两个点开始,每一步都能排除一行或者一列。...原创 2022-07-16 17:19:01 · 306 阅读 · 0 评论 -
【剑指Offer | C++ 】面试题3:数组中重复的数字
在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了多少次。请找出数组中任意一个重复的数字。例如,如果长度为7 的数组{2,3,1,0,5,3},那么对应的输出是重复的数字2或3。该题还可用哈希表或者排序解决关键点:代码:比起上面的题目添加一个要求不修改数组!可以使用辅助数组判断时间复杂度:O(n)空间复杂度:O(n)以时间换空间的算法:每次都查找前半段如果次数多就在前面,否则在后面...原创 2022-06-07 20:14:50 · 195 阅读 · 0 评论 -
【剑指Offer | C++】面试题一:赋值运算符函数
关键点:代码:原创 2022-06-05 15:28:13 · 125 阅读 · 0 评论