
剑指offer
面试真题
liujjjiyun
这个作者很懒,什么都没留下…
展开
-
最长不含重复字符的子字符串 剑指offer
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含'a'~'z'的字符。例如,在字符串"arabcacfr"中,最长的不含重复字符的子字符串是"acfr",长度为4。原创 2024-12-19 19:11:59 · 968 阅读 · 0 评论 -
礼物的最大价值 剑指offer
在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?原创 2024-12-19 18:55:01 · 520 阅读 · 0 评论 -
把数字翻译成字符串 剑指offer
给定一个数字,我们按照如下规则把它翻译成字符串:0翻译成“a”,1 翻译成“b”,……,11翻译成“l”,……,25翻译成“z”。一个数字可能有多个翻译。例如,12258有5种不同的翻译,分别是“bccfi”“bwfi”、“bczi”、“mcfi”和“mzi”。请编程实现一个的函数,用来计算一个数字有多少种不同的翻译方法。原创 2024-12-19 18:35:14 · 317 阅读 · 0 评论 -
把数组排成最小的数 剑指offer
输入一个正整数数组,把数组里所有数字拼接起来排列成一个数,打印能拼接出的所有数字中最小的一个。例如,输入数组(3,32,321},则打印出这3个数字能排成的最小数字321323。原创 2024-12-19 18:21:48 · 422 阅读 · 0 评论 -
数字序列中某一位的数字 剑指offer
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第 19位是 4,等等。请写一个函数,求任意第n位对应的数字。原创 2024-12-19 18:07:50 · 247 阅读 · 0 评论 -
1~n整数中1出现的次数 剑指offer
输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。原创 2024-12-18 21:17:52 · 280 阅读 · 0 评论 -
连续子数组的最大和 剑指offer
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。原创 2024-12-18 21:05:21 · 192 阅读 · 0 评论 -
数据流中的中位数 剑指offer
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。原创 2024-12-18 20:54:35 · 258 阅读 · 0 评论 -
最小的k个数 剑指offer
输入n个整数,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是 1、2、3、4。原创 2024-12-18 20:34:01 · 860 阅读 · 0 评论 -
数组中出现次数超过一半的数字 剑指offer
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组(1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。原创 2024-12-18 20:06:25 · 423 阅读 · 0 评论 -
字符串的排列 剑指offer
输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab 和cba。原创 2024-12-16 20:58:20 · 394 阅读 · 0 评论 -
序列化二叉树 剑指offer
请实现两个函数,分别用来序列化和反序列化二叉树。原创 2024-12-16 20:17:59 · 324 阅读 · 0 评论 -
二叉搜索树与双向链表 剑指offer
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。比如,输入下图中左边的二叉搜索树,则输出转换之后的排序双向链表。原创 2024-12-16 20:04:03 · 586 阅读 · 0 评论 -
复杂链表的复制 剑指offer
请实现函数 ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext 指针指向下一个节点,还有一个m_pSibling 指针指向链表中的任意节点或者nullptr。原创 2024-12-16 19:53:03 · 637 阅读 · 0 评论 -
二叉树中和为某一值的路径 剑指offer
如果该节点为叶节点,并且路径中节点值的和刚好等于输入的整数,则当前路径符合要求,我们把它打印出来。在前面的代码中,我们用标准模板库中的vector实现了一个栈来保存路径,每次都用pushback在路径的末尾添加节点,用popback 在路径的末尾删除节点,这样就保证了栈的先入后出特性。这里没有直接用STL中的 stack 的原因是,在stack中只能得到栈顶元素,而我们打印路径的时候需要得到路径上的所有节点,因此在代码实现的时候 std::stack 不是最好的选择。考查应聘者对二叉树的前序遍历的理解。原创 2024-12-16 21:23:07 · 397 阅读 · 0 评论 -
二叉搜索树的后序遍历序列 剑指offer
例如,输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数数组序列是下图二叉搜索树的后序遍历结果。如果输入的数组是{7,4,6,5},则由于没有哪颗二叉搜索树的后序遍历结果是这个序列,因此返回false。如果面试题要求处理一棵二叉树的遍历序列,则可以先找到二叉树的根节点,再基于根节点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。这和前面问题的后序遍历很类似,只是在前序遍历得到的序列中,第一个数字是根节点的值。原创 2024-12-15 19:48:30 · 180 阅读 · 0 评论 -
之字形打印二叉树 剑指offer
在打印根节点的时候,先后把节点2和节点3保存到里。在打印节点3时,把它的两个子节点6和7保存到栈里。此时由于节点7位于栈顶,接下来将打印节点7,而不是节点2。我们在打印某一层的节点时,把下一层的子节点保存到相应的栈里如果当前打印的是奇数层(第一层、第三层等),则先保存左子节点再保存右子节点到第一个栈里;请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。在打印一个栈里的节点时,它的子节点保存到另一个栈里。原创 2024-12-16 19:07:13 · 255 阅读 · 0 评论 -
分行从上到下打印二叉树 剑指offer
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。原创 2024-12-15 18:22:55 · 149 阅读 · 0 评论 -
不分行从上到下打印二叉树 剑指offer
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如,下图发二叉树,依次打印出8,6,10,5,7,9,11。原创 2024-12-15 18:14:10 · 134 阅读 · 0 评论 -
栈的压入、弹出序列 剑指offer
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是压栈序列的弹出序列。原创 2024-12-15 18:03:00 · 299 阅读 · 0 评论 -
包含min函数的栈 剑指offer
定义栈的数据结构,请在该类型中,实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push和pop的时间复杂度都是O(1)。m_data是数据栈, m_min是辅助栈。原创 2024-12-15 17:48:46 · 270 阅读 · 0 评论 -
顺时针打印矩阵 剑指offer
输入一个矩阵,按照从外往里以顺时针的顺序依次打印出每一个数字。例如,如果输入以下矩阵:可以用一个循环来打印矩阵,每次打印矩阵中的一个圈。原创 2024-12-14 20:06:31 · 176 阅读 · 0 评论 -
对称的二叉树 剑指offer
请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。例如下图,第一颗是对称的,其他两颗不是。原创 2024-12-14 19:49:09 · 342 阅读 · 0 评论 -
二叉树的镜像 剑指offer
上面的代码是用递归实现的,如果要求用循环,则如何实现?原创 2024-12-14 18:45:49 · 556 阅读 · 0 评论 -
树的子结构 剑指offer
输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:如下图,B是A的子结构。原创 2024-12-13 17:40:47 · 230 阅读 · 0 评论 -
合并两个排序的链表 剑指offer
输入两个排序的链表,合并这两个链表并且使新链表中的节点仍然是递增排序的。例如,输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示。原创 2024-12-13 17:17:59 · 165 阅读 · 0 评论 -
反转链表 剑指offer
定义一个函数,输入一个链表的头节点,反转该链表并且输出反转后链表的头节点。原创 2024-12-13 00:00:00 · 166 阅读 · 0 评论 -
链表中环的入口节点 剑指offer
如果一个链表中包含环,如何找出环的入口节点?例如,下图中,环的入口节点是节点3。原创 2024-12-10 21:33:40 · 212 阅读 · 0 评论 -
链表中倒数第K个节点 剑指offer
输入一个链表,输出该链表中倒数第K个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2 、3 、4、 5、 6。这个链表的倒数第三个节点的值为4的节点。原创 2024-12-09 21:28:13 · 440 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面 剑指offer
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所以偶数位于数组的后半部分。原创 2024-12-10 00:00:00 · 324 阅读 · 0 评论 -
表示数值的字符串 剑指offer
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但是“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。原创 2024-12-09 18:43:43 · 158 阅读 · 0 评论 -
正则表达式匹配 剑指offer
请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。原创 2024-12-09 16:53:06 · 160 阅读 · 0 评论 -
删除链表中的重复节点 剑指offer
在一个排序的链表中,如何删除重复的节点?原创 2024-12-12 00:00:00 · 328 阅读 · 0 评论 -
在O(1)时间内删除链表节点 剑指offer
给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。在链表中删除一个节点的两种方法。原创 2024-12-09 14:54:27 · 283 阅读 · 0 评论 -
打印从1到最大的n位数 剑指offer
输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印1,2,3一直到最大的3位数999.按照阅读习惯打印数字 ,是面试官给我们的另外一个小陷阱。递归结束的条件是我们已经设置了数字的最后一位。原创 2024-12-11 00:00:00 · 261 阅读 · 0 评论 -
数值的整数次方 剑指offer
在上述代码中,采用全局变量来标识是否出错。如果出错了,返回值为0;但是为了区分出错的时候返回的是0,还是底数为0的时候正常运行的0,还定义了一个全局变量g_InvalidInput。当出错是这个变量被设为true,否则为false。实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。这里还有一个细节,用右移运算符代替了除2,效率更高。在C语言中,pow函数可以用来求乘方,本题就是要求实现类似的功能。原创 2024-12-08 16:35:17 · 238 阅读 · 0 评论 -
如何书写高质量代码 剑指offer
规范性完整性3种错误处理的方法鲁棒性原创 2024-12-08 12:58:28 · 122 阅读 · 0 评论 -
二进制中1的个数 剑指offer
包括有:与、或、异或,左移和右移。原创 2024-12-08 12:45:51 · 165 阅读 · 0 评论 -
剪绳子 剑指offer
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1,并且m>1),每段绳子的长度记为k[0],k[1],...k[m]。请问k[0]*k[1]*...k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18。原创 2024-12-07 18:32:38 · 258 阅读 · 0 评论 -
机器人的运动范围 剑指offer
地上有一个m列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7=18。但它不能进入方格(35,38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?函数getDigitSum用来得到一个数字的数位之和。原创 2024-12-06 17:53:31 · 205 阅读 · 0 评论