剑指offer面试题
文章平均质量分 57
Tianzez
稳健
展开
-
《剑指offer》面试题19:正则表达式匹配
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"及"ab*a"均不匹配。解题思路:这里匹原创 2018-02-01 10:13:36 · 454 阅读 · 0 评论 -
《剑指offer》面试题01:赋值运算符函数
更多剑指offer习题请点击:《剑指offer》(第二版)题集目录索引题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString...原创 2018-04-16 17:01:19 · 509 阅读 · 0 评论 -
《剑指offer》面试题18:删除链表的节点(扩展)
更多剑指offer习题请点击:《剑指offer》(第二版)题集目录索引1. 题目一:在 O(1)O(1)O(1) 时间内删除链表节点 给定单向链表的头指针和一个节点指针,定义一个函数在 O(1)O(1)O(1) 时间内删除该节点。链表节点与函数定义如下:typedef struct ListNode{ int m_nValue; struct ListNod...原创 2018-04-16 20:34:17 · 569 阅读 · 0 评论 -
《剑指offer》面试题07:重建二叉树
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目: 输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{ 1, 2, 4, 7, 3, 5, 6, 8 }和中序遍历序列{ 4, 7, 2, 1, 5, 3, 8, 6 },则重建的二叉树如图所示: 解题思路: 我...原创 2018-04-11 18:36:25 · 371 阅读 · 0 评论 -
《剑指offer》面试题09:用两个栈实现一个队列
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。解题思路: 使用两个栈:s1、s2,所有的压栈Push操作全部在s1完成。关于出栈Pop操作则要分情况讨论: 1. 如果s2为空,则...原创 2018-04-18 15:22:44 · 288 阅读 · 0 评论 -
《剑指offer》面试题06:从尾到头打印链表
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值。解题思路: 关于这题我们可以用三种方法解决: 1. 栈 2. 递归 3. 循环< code1_stack>void PrintListReversingly_Iteratively(ListNode*...原创 2018-04-18 16:23:12 · 405 阅读 · 2 评论 -
《剑指offer》面试题57:和为s的两个数字(扩展)
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目1:和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。解题思路: 用start和end来做标记,开始时分别标记数组的首、尾元素。比较这两个数之和sum与s的大小,如果sum&lt;s,那么让start++,标...原创 2018-04-30 12:07:13 · 307 阅读 · 0 评论 -
《剑指offer》面试题08:二叉树的下一个节点
更多剑指offer习题请点击:《剑指offer》(第二版)题集目录索引题目: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。解题思路: 面对这种看似复杂无从下手的题,我们不应急着写代码,而是先捋清除思路,列出可能出现的所有情况,然后再看有哪些情况可以合并,这样可以尽可能的避免出错...原创 2018-04-13 23:29:21 · 329 阅读 · 0 评论 -
《剑指offer》面试题22:链表中倒数第k个结点
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引1. 题目: 输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。2. 解题思路: 采用快慢指针法,快指针p...原创 2018-05-01 16:35:59 · 398 阅读 · 0 评论 -
《剑指offer》面试题23:链表中环的入口节点
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引1. 题目: 一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中,环的入口结点是结点3。 2. 解题思路1:第一步:判断链表是否带环 首先利用快慢指针法,确定链表是否带环。用两个指针pFast和pSlow。开始时两者都指向头结点pHead,然后同时往后走。快指针一次走两...原创 2018-05-02 10:18:03 · 293 阅读 · 0 评论 -
《剑指offer》面试题24:反转链表
更多剑指offer面试习题请点击:《剑指offer》(第二版)习题目录索引题目: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。结点定义如下:typedef struct ListNode{ int m_nValue; struct ListNode* m_pNext;}ListNode;&lt; code &gt;ListNo...原创 2018-04-20 15:45:22 · 939 阅读 · 0 评论 -
《剑指offer》面试题25:合并两个排序的链表
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引1. 题目2. 递归解法3. 非递归解法1. 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。2. 递归解法ListNode* MergeR(ListNode* pHead1, ListNode* pHead2){ if (pHead1 ...原创 2018-05-11 17:05:46 · 296 阅读 · 0 评论 -
《剑指offer》面试题36:将二叉搜索树转换成双向链表
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引一、题目二、解题思路三、实现代码四、测试代码五、测试结果六、基础代码1. 打印双向链表2. 销毁双向链表3. 创建二叉树节点4. 链接二叉树5. 按中序遍历打印二叉树一、题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树...原创 2018-05-20 16:40:46 · 874 阅读 · 0 评论 -
《剑指offer》面试题49:丑数
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引一、题目二、解法一三、实现代码一四、解法二五、实现代码二六、测试两种方法的性能一、题目 我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。 二...原创 2018-05-20 20:47:21 · 758 阅读 · 0 评论 -
《剑指offer》面试题39:数组中出现次数超过一半的数字
更多剑指offer面试题请点击:《剑指offer》(第二版)题集目录索引 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。解题思路: 数组中一个数字出现的次数超过数组长度的一半,那就是说其他数字出现的次数之和都比它...原创 2018-02-08 10:21:50 · 490 阅读 · 0 评论 -
《剑指offer》面试题29:顺时针打印矩阵
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下矩阵:/*1 2 3 45 6 7 89 10 11 1213 14 15 16*/则依次打印出数字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,1原创 2018-02-06 13:16:01 · 465 阅读 · 0 评论 -
《剑指offer》面试题17:打印从1到最大的n位数
.更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999。解题思路: 大家第一眼看到这种题目可能觉得特别简单,直接用一个循环打印1到最大的n位数不就好了嘛。所以很快的写下如下代码:void Print1ToMaxOfNDigits(int n)原创 2018-01-30 09:56:31 · 513 阅读 · 2 评论 -
《剑指offer》面试题12:矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子原创 2018-01-25 11:11:41 · 470 阅读 · 0 评论 -
《剑指offer》面试题20:表示数值的字符串
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。 科学计数法:这是一种记数的方法。把一个数表示成a(1≤a原创 2018-02-03 11:30:52 · 521 阅读 · 0 评论 -
《剑指offer》(第二版)题集目录索引
【PS】:后期会把未完成的题目逐一补上01:赋值运算符函数03:数组中重复的数字04:二维数组中的查找05:替换空格06:从尾到头打印链表07:重建二叉树08:二叉树的下一个节点09:用两个栈实现一个队列10:斐波那契数列11:旋转数组的最小数字13:机器人的运动范围...原创 2018-01-28 19:14:29 · 2444 阅读 · 0 评论 -
《剑指offer》面试题03:数组中重复的数字
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目1: 找出数组中重复的数字。 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如: 输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。...原创 2017-11-02 20:12:32 · 841 阅读 · 0 评论 -
《剑指offer》面试题04:二维数组中的查找
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:杨氏矩阵的特点是它的行和列的数都是递增的,所以我们可以选择它的一个顶点元素作为比较对象。比如我在下面这个数组中查找数字2。原创 2017-10-19 12:34:59 · 987 阅读 · 0 评论 -
《剑指offer》面试题05:替换空格
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy!”,则输出“We%20are%20happy!”解题思路:从后往前复制,遇到非空格时直接把这个字符拷贝到后面,遇到空格则插入“%20”。 蓝色区域是进行了字符复制或移动的区域 &...原创 2017-10-20 20:10:55 · 521 阅读 · 0 评论 -
《剑指offer》面试题10:斐波那契数列(含矩阵乘法解法)
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引 斐波那契数指的是这样一个数列:0、1、1、2、3、5、8、13、21、…… 这个数列从第三个数开始,之后的每一个数都由它前的两数相加得到。 我们知道在编程中我们可以用递归和迭代两种方法求指定的斐波那契数,但这两种方法各有利弊。 区别:递归法(时间复杂度O(2^n))写出来的代码可读性...原创 2017-11-04 14:20:04 · 1004 阅读 · 0 评论 -
《剑指offer》面试题11:旋转数组的最小数字
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{ 3, 4, 5, 1, 2 }为{ 1, 2, 3, 4, 5 }的一个旋转,该数组的最小值为1。解题思路: 这题很明显是要利用旋转数组的特性,一个递增排序的数组...原创 2018-01-22 10:53:08 · 492 阅读 · 0 评论 -
《剑指offer》面试题13:机器人的运动范围
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人原创 2018-01-24 15:50:08 · 643 阅读 · 0 评论 -
《剑指offer》面试题14:剪绳子(动态规划、贪婪算法)
更多剑指offer面试习题请点击: 《剑指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。解题思路:...原创 2018-01-26 13:42:38 · 5505 阅读 · 11 评论 -
《剑指offer》面试题15:二进制中1的个数
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。解题思路1:利用位运算,首先让number和1进行 & 运算,判断 n&1 的结果是否为1,接着把1左移一位得到2,再和n做 与 运算,反复循环,每次判断n的其中一位是原创 2017-10-13 07:26:05 · 589 阅读 · 0 评论 -
《剑指offer》面试题16:数值的整数次方
更多剑指offer面试习题请点击: 《剑指offer》(第二版)题集目录索引题目: 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解题思路: 很多人可能一开始看到不需要考虑大数问题,就觉着这题很简单,快速的写下下面的代码: < code >...原创 2018-01-28 11:49:08 · 543 阅读 · 0 评论 -
《剑指offer》面试题21:调整数组顺序使奇数位于偶数前面(扩展)
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路: 这题如果不考虑算法的效率可以直接从头到尾扫描这个数组,遇到偶数就拿出来然后把这个偶数后面的数字全部往前挪一位,最后把这个偶数放在数组末尾空出来的那个位置。但这里每碰到一个原创 2018-02-05 14:23:50 · 532 阅读 · 0 评论 -
《剑指offer》面试题61:扑克牌中的顺子
更多剑指offer面试习题请点击:《剑指offer》(第二版)题集目录索引一、题目二、解题思路三、代码实现四、测试代码五、测试结果一、题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。二、解题思路 这里我们可以把五张牌看作一个数组,数组里面有五...原创 2018-05-23 15:27:59 · 569 阅读 · 0 评论