
剑指offer面试题
wuxiaosi808
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer:树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:第一步先在树A中找到熟B的根节点的值一样的节点R,第二步在判断树A中以R为根结点的子树是不是包含B树一样的结构。代码如下:/*思路:参考剑指offer1、首先设置标志位result = false,因为一旦匹配成功result就设为true,剩下的代码不会执行,如果匹配原创 2017-08-08 21:50:49 · 261 阅读 · 0 评论 -
剑指offer:合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:假设 链表1:1->3->5->7 链表2:2->4->6->8 链表3:1->2->3->4->5->6->7->8我们可以先比较两个链表的头结点,发现链表1的结点值1小于链表2的结点值2,那么原创 2017-08-05 15:08:36 · 239 阅读 · 0 评论 -
剑指offer:圆圈中最后剩下的数字
题目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去...原创 2017-08-13 10:39:24 · 327 阅读 · 0 评论 -
剑指offer:链表中环的入口结点
题目:一个链表中包含环,请找出该链表的环的入口结点。判断一个链表是否有环,可以用快慢指针来判断,开始的时候快慢指针都指向头结点,慢指针一次走一个,快指针一次走两个,当他们相遇的时候说明此链表有环,并且相遇的结点一定是在环中。可以从这个结点出发,一遍继续向前移动一边计数,当再次回到这个结点的时候,就能得到环中的结点数了。其实就像操场跑圈一样,跑得快的和跑的慢的人相遇,跑得快的要不是比慢的多跑原创 2017-08-05 15:27:31 · 281 阅读 · 0 评论 -
剑指offer:从尾到头打印链表
题目:输入一个链表的头结点,从头到尾反过来打印出每个节点的值。思路:初看这个题目,我们想到的是从头到尾的打印链表比较简单,我们很自然的会想到能不能把链表中的结点指针反转过来,改变链表的方向。但是这样的方法会修改链表的结构,不一定符合面试官的要求。既然是从尾到头打印,我们自然会想到借助栈来实现,因为栈是先进后出,后进先出的结构。所以我们可以没遍历一个结点的时候把结点放进栈里,遍历完链表后,再从栈原创 2017-07-29 10:12:58 · 298 阅读 · 0 评论 -
剑指offer:第一次只出现一次的字符
题目:在一个字符串(1思路:初看题目,会想到从头开始扫描这个字符串中的每一个字符。当访问到某个字符的时候拿这个字符与后面的每个字符比较,如果在后面没有发现重复的字符说明该字符只出现一次。这样复杂度为O(n^2)。这时候我们想到了哈希表,key是字符,value是出现次数。还是需要我们扫描两次字符串。第一次扫描字符串的时候,每扫描一个字符就在哈希表的对应项中吧次数+1,;接下来第二次扫描,每原创 2017-08-15 09:40:28 · 438 阅读 · 0 评论 -
剑指offer:左旋转字符串
题目:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!代码如下:public class Solution { public Strin原创 2017-08-15 10:48:02 · 221 阅读 · 0 评论 -
剑指offer:和为S的连续正数序列
题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?Good Luck!输出描述:输出所有和为S的连续正数序原创 2017-08-26 11:26:13 · 218 阅读 · 0 评论 -
剑指offer:数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路1:最直观的想法就是数组排序,然后中间值肯定是要查找的值。 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历。代码如下:import java.util.原创 2017-08-28 09:11:38 · 235 阅读 · 0 评论 -
剑指offer:反转链表
题目:输入一个链表,反转链表后,输出链表的所有元素。需要注意:1,输入的链表头指针为null;2,输入的链表只有一个结点;3,输入的链表有多个结点。代码如下:public class Solution { public ListNode ReverseList(ListNode head) {if(head==null)return null;ListNode p原创 2017-08-05 11:22:27 · 257 阅读 · 0 评论 -
剑指offer:链表中倒数第K个结点
题目:输入一个链表,输出该链表中倒数第k个结点。初看题目,感觉应该是从头到尾遍历链表,然后从尾回溯K步,因为是单向链表,此路不通。换条路吧。假设链表有n个结点,要找到倒数第K个结点,就是从头开始到第n-k+1个结点,但是n如何得到呢?需要从头到尾遍历,每遍历一个结点就count+1即可,这样需要遍历两次链表才能完成任务。如何才能遍历一次链表就能找到倒数第K个节点呢?我们可以定义两个指针原创 2017-08-05 10:53:27 · 298 阅读 · 0 评论 -
剑指offer:二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6原创 2017-08-02 09:44:45 · 255 阅读 · 0 评论 -
剑指offer:从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路: 每一次打印一个结点的时候,如果该结点有子结点,则把子结点放进队列的末尾。接下来把最早进入队列的头部取出,重复前面的步骤,直至队列里的所有结点都打印完毕。 代码如下: public class Solution { public ArrayList PrintFromTopToBottom(TreeNode roo原创 2017-08-02 09:59:45 · 352 阅读 · 0 评论 -
剑指offer:二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:因为是从根结点到叶结点的路径值和,所以要选择前序遍历。当用前序遍历的方式访问某一结点时,把该结点添加到路径上,并累加该结点的值。如果该结点是叶结点并且路径中结点值是输入的整数值,当前路径就符合要求,打印出来。如果当前结点是非叶结点,则继原创 2017-08-09 09:53:48 · 236 阅读 · 0 评论 -
剑指offer:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路: 在后序遍历得到的序列中,最后一个数字是根节点的值。数组前面的数字可以分为两部分:第一部分是左子树结点的值,都小于根的值;第二部分是右子树结点的值都大于根节点。 代码如下; public class Solution { publi原创 2017-08-02 11:25:55 · 235 阅读 · 0 评论 -
剑指offer:二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:如果一棵树只有一个结点,则深度是1。如果根结点只有左子树而没有右子树,则深度是左子树的深度+1;如果根结点只有右子树没有左子树,则深度应该是右子树的深度+1;如果根结点既有左子树又有右子树,则深度是左子树和右子树深度较大者+1.代码如下:pub原创 2017-08-09 10:21:55 · 286 阅读 · 0 评论 -
剑指offer:二叉树的下一个结点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:中序遍历是左根右的遍历方式,如果一个结点有右子树,则它的下一个结点是右子树中的最左子结点。也就是从右子结点出发一直沿着指向左子结点的指针,就能找到它的下一个结点。如果没有右子树,如果结点是它的父结点的左子结点那么它的下一个结点是它的父结点。如原创 2017-08-09 10:43:51 · 251 阅读 · 0 评论 -
剑指offer:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如:1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 要找的数是7. 因为二维数组每行原创 2017-08-05 10:11:13 · 248 阅读 · 0 评论 -
剑指offer:空格替换
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码如下:import java.util.*;public class Solution { public String replaceSpace(StringBuffer str) { StringBuffer原创 2017-08-05 10:24:08 · 230 阅读 · 0 评论 -
剑指offer:连续子数组的最大和
题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度原创 2017-09-11 15:43:00 · 258 阅读 · 0 评论