面试算法题
文章平均质量分 54
工作面试专栏,这里主要汇集平时经典算法问题
learning112358
这个作者很懒,什么都没留下…
展开
-
面试题12:矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3<4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下画线标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。这是一个可以用回溯法解决的典型题。首先,在矩阵中任选一原创 2021-10-28 22:53:22 · 142 阅读 · 0 评论 -
面试题11:旋转数组的最小数字
题目:把一个数组最开始的若千个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2, 3,4, 5}的一个旋转,该数组的最小值为1。我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面子数组的元素都大于或者等于后面子数组的元素。我们还注感到最小的元素刚好是这两个子数组的分界线。在排序的数组中我们可以用二分查找法实现Olog)的查找。本题给出的数组在一定程度上是排序的,因此我们可以试着用二原创 2021-10-28 22:49:53 · 107 阅读 · 0 评论 -
面试题10:斐波那契数列
题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:# 面试题10 菲波那切数列'''如果采用递归的话,数字过大会导致栈溢出。有一个办法就是讲计算的结果保存下来,不需要重复计算,这样能优化一下性能。但还是推荐非递归版本。'''def Fibonacci_Recursion(num): if num<=0: return 0 elif num ==1: return 1原创 2021-10-28 22:42:47 · 204 阅读 · 0 评论 -
面试题9:用两个栈实现队列
题目:用两个栈实现二个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead, 分别完成在队列尾部插 入节点和在队列头部删除节点的功能从上述队列的声明中可以看出,一个队列包含了两个栈stack1 和stack2,因此这道题的意图是要求我们操作这两个“先进后出”的栈实现一个“先进先出”的队列CQueue。我们通过个具体的例子来分析往该队列插入和删除元素的过程。首先插入一一个元素a,不妨先把它插入stack1, 此时stack1 中的元素有{a},stack2为空。原创 2021-10-28 22:40:46 · 90 阅读 · 0 评论 -
面试题8:二叉树的下一个节点
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。在图2.8中的二叉树的中序遍历序列是{d, b,h,e,i,a, f,c, g}。我们将以这棵树为例来分析如何找出二叉树的下一个节点。如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。也就是说,从右子节点出发一直沿着指向左子节点的指针,我们就能找到它的下一个节点。 例如,图28中节点b的下一个节点是小.节点a的下一个节点是f。接着原创 2021-10-27 23:39:05 · 169 阅读 · 0 评论 -
面试题7:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该E叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4, 7,3, 5, 6, 8}和中序遍历序列{4, 7,2,1,5,3,8, 6},则,重建如图2.6所示的二叉树并输出它的头节点。在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历序列中,根节点的值在序列的中间,左子树的节点的值位于根节点的值的左边,而右子树的节点的值位于根节点的值的右边。因此我们需要扫描中序遍历序列,才能找到原创 2021-10-27 23:33:47 · 91 阅读 · 0 评论 -
面试题6:从尾到头打印链表
题目:输入一个链表的头节点,,从尾到头反过来打印出每个节点的值。通常打印是一个只读操作,我们不希望打印时修改内容。假设面试官也要求这个题目不能改变链表的结构。接下来我们想到解决这个问题肯定要遍历链表。遍历的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说,第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出。这就是典型的“后进先出”,我们可以用栈实现这种顺序。每经过一一个节点的时候,把该节点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出节点的值,此时输出的节点的顺序已原创 2021-10-27 23:26:35 · 142 阅读 · 0 评论 -
面试题5:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如,输入“We are happy.",则输 出“We%20are%20happy.”。我们可以先遍历-次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。我们还是以前面的字符串"We are happy.“为例。“We are happy.“这个字符串的长度是14 (包括结尾符号"10’),里面有两个空格,因此替换之后字符串原创 2021-10-27 23:21:58 · 127 阅读 · 0 评论 -
面试题4:二维数组中的查找
题目:: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从 上到下递增的顺序排序。请完成一个函数,输入这样的一( 个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。1 2 8 92 4 9 124 7 10 136 8 11 15在分析这个问题的时候,很多应聘者都会把二维数组画成矩形,然后从数组中选取一一个数字,分3种情况来分析查找的过原创 2021-10-26 23:16:29 · 86 阅读 · 0 评论 -
数组中重复的数字
面试题3:数组中重复的数字题目一:找出数组中重复的数字。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3, 1,0,2,5, 3},那么对应的输出是重复的数字2或者3。解决这个问题的一个简单的方法是先把输入的数组排序。从排序的数组中找出重复的数字是一件很容易的事情,只需要从头到尾扫描排序后的数组就可以了。排序一个长度为n的数组需要O(nlog原创 2021-10-26 22:34:36 · 78 阅读 · 0 评论