![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
程序员卤蛋
这个作者很懒,什么都没留下…
展开
-
剑指offer 面试题3 二维数组中的查找 java版答案
package OfferAnswer;/** * 面试题三 * 二维数组的查找 * @author lwk * */public class Answer03 { public static void main(String[] args) { int[][] matrix = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,原创 2016-11-14 09:23:44 · 321 阅读 · 0 评论 -
《剑指offer》第16题 反转链表(Java版答案)
题目:输入一个链表,反转该链表,并输出反转后链表的头结点。答案:public ListNode reverseListNode(ListNode head) { if (head == null) { return null; } ListNode p1 = head; ListNode p2 ...原创 2019-05-07 11:56:29 · 106 阅读 · 0 评论 -
《剑指offer》第17题 合并两个排序的链表(Java版答案)
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。答案:递归public ListNode mergeListNode(ListNode head1, ListNode head2) { if (head1 == null) { return head2; } if (hea...原创 2019-05-07 11:56:59 · 100 阅读 · 0 评论 -
《剑指offer》第18题 树的子结构(Java版答案)
题目:输入两颗二叉树A和B,判断B是不是A的子结构。答案:递归第一步,在树1中找到和树2的根结点的值一样的结点R第二步,判断树1中以R为根结点的子树是不是包含和树2一样的结构。public boolean isSubTree(TreeNode root1, TreeNode root2) { if (root1 == null) { ...原创 2019-05-07 11:57:37 · 82 阅读 · 0 评论 -
《剑指offer》第19题 二叉树的镜像(Java版答案)
题目:输入一个二叉树,输出它的镜像。答案:递归public void mirrorTree(TreeNode root) { if (root == null) { return; } //交换根结点的左右节点 TreeNode temp = root.left; ...原创 2019-05-07 11:58:19 · 105 阅读 · 0 评论 -
《剑指offer》第20题 顺时针打印矩阵(Java版答案)
题目:输入一个矩阵,按照从外到里以顺时针的顺序依次打印出每一个数字。示例: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、10答案:每次循环打印一圈,能否继续打印一圈的判断条件是rows > 2 * start && columns &g...原创 2019-05-08 20:38:09 · 78 阅读 · 0 评论 -
《剑指offer》第21题 包含min函数的栈(Java版答案)
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素min函数。在该栈中调用min、push及pop的时间复杂度都是O(1)。答案:借助辅助栈,辅助栈栈顶保留最小值比如压入5,3,6,2,4先压入5,辅助栈也压入5.压入3,由于3比5小,则辅助栈压入3压入6,由于6比目前辅助栈中的最小值3大,则辅助栈压入3.压入2,由于2比目前辅助栈中的最小值3小,则辅...原创 2019-05-08 20:38:23 · 94 阅读 · 0 评论 -
《剑指offer》第24题 二叉搜索树的后序遍历序列(Java版答案)
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入数组的任意两个数组都不相同。答案:采用递归的思路。1.根据后序遍历规则,数组的最后一个元素,即为头结点2.那么数组里从头到尾遍历,前面小于的头结点的值,位于树的左子树,后面大于的头结点的值,位于树的右子树。3.找到这个将数组一分为二的位置,然后分别判断左右子树是否是二叉搜索树。 pub...原创 2019-05-15 20:11:33 · 83 阅读 · 0 评论 -
《剑指offer》第22题 栈的压入、弹出序列(Java版答案)
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。示例:压栈序列:1、2、3、4、5序列4、5、3、2、1是一个弹出序列序列4、3、5、1、2不是一个弹出序列答案:借助辅助栈将压栈数组先入辅助栈,每次入栈后均去判断是否是弹出序列要弹出的元素若是,则从辅助栈中弹出元素,然后继续判断下一个元素能否...原创 2019-05-11 20:17:57 · 153 阅读 · 0 评论 -
《剑指offer》第23题 树的层序遍历(Java版答案)
题目:树的层序遍历。答案:借助辅助队列,先进先出先将父节点加入列表。每次从列表中,取出节点进行遍历。每次遍历节点后,若节点存在左子节点,则将左子节点加入队列;若节点存在右子节点,则将右子节点加入队列;遍历直至列表为空。 public void layerTraverse(TreeNode root) { if (root == nul...原创 2019-05-11 20:30:22 · 125 阅读 · 0 评论 -
《剑指offer》第25题 二叉树中和为某一值的路径(Java版答案)
题目:输入一个二叉树和一个整数,打印出二叉树中的一条路径和为该整数的路径。答案:采用递归的思路。 public void findPath(TreeNode root, int target) { if (root == null) { return; } List<Integer> pat...原创 2019-05-17 17:55:16 · 111 阅读 · 0 评论 -
《剑指offer》第15题 链表中倒数第K个结点(Java版答案)
题目:输入一个链表,输出链表中倒数第K个结点。答案:常规思路就是要经过两次遍历,不够高效。先遍历一遍链表,得到链表的长度n,再减去k,得到结点的正数位置,最后再遍历得到这个结点。双指针法。只需要遍历一次链表第一个指针p1先走k步然后第二个指针p2与p1同时走,这样p1和p2之间一直保持k个结点的距离。因此直到p1走到最后一个结点,此时p2正好位于倒数第k个结点...原创 2019-05-07 11:55:34 · 82 阅读 · 0 评论 -
《剑指offer》第14题 调整数组顺序,使奇数位于偶数前面(Java版答案)
题目:输入一个整数数组,实现函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。答案:头尾各一个指针,若头部指针指向的是奇数,则后移;指向偶数时停止移动若尾部指针指向的是偶数,则前移;指向奇数时停止移动交换头尾指针指向的数字。public void adjustArray(int[] array) { if (a...原创 2019-05-07 11:54:53 · 126 阅读 · 0 评论 -
剑指offer 面试题4 替换空格 java版答案
package OfferAnswer;/** * 面试题4 * 替换空格 * @author lwk * */public class Answer04 { public static void main(String[] args) { String str = "we are happy"; String getStr = replaceBl原创 2016-11-14 09:44:55 · 274 阅读 · 0 评论 -
剑指offer 面试题5 从尾到头打印链表 java版答案
package OfferAnswer;import java.util.Stack;/** * 面试题5 * 从尾到头打印链表 * @author lwk * */public class Answer05 { public static void main(String[] args) { ListNode p1 = new ListNode(1); Lis原创 2016-11-14 10:07:19 · 382 阅读 · 0 评论 -
剑指offer 面试题6 重建二叉树 java版答案
package offerAnswer;/* 定义二叉树*/public class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode right;}package OfferAnswer;/** * 面试题6 * 重建二叉树 * @author lwk * 1.通过前序遍历原创 2016-11-14 20:11:10 · 308 阅读 · 0 评论 -
剑指offer 面试题7 两个栈实现队列 java版答案
package OfferAnswer;import java.util.Stack;/** * 面试题7 * 两个栈实现队列 * @author lwk * */public class Answer07 { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void add(in原创 2016-11-15 11:26:43 · 318 阅读 · 0 评论 -
剑指offer 面试题8 旋转数组的最小值 java版答案
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小值。示例:数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转该数组的最小值为1。答案:一般情况 {3,4,5,1,2},二分查找特殊情况一 : {1,1,1,0,1}或{1,0,1,1,1},只能顺序查找特殊情况二 : {1,2,3...原创 2016-11-15 17:02:50 · 325 阅读 · 0 评论 -
剑指offer 面试题9 斐波那契数列 java版答案
package OfferAnswer;/** * 面试题09 * 斐波那契数列 * @author lwk * */public class Answer09 { public static void main(String[] args) { long start = System.currentTimeMillis(); System.out.println(Fibo原创 2016-11-15 17:25:24 · 358 阅读 · 0 评论 -
《剑指offer》第10题 二进制中的1(Java版答案)
题目:实现一个函数,输入一个整数,输出该数二进制表示中1的个数。示例:9表示为二进制是1001,有2位是1因此输出为2.答案:9的二进制是1111,&8 1111 & 1110 为1110&7 1110 & 1101 为1100&6 1100 & 1010 为1000&5 1000 & 0111...原创 2019-05-07 11:50:19 · 100 阅读 · 0 评论 -
《剑指offer》第11题 数值的整数次方(Java版答案)
题目:实现函数,求base的exponent次方。不得使用库函数,不用考虑大数问题。示例:base = 2;exponent = 3输出为2的3次方,8。答案:常规思路,不够高效/** * 常规思路,不够高效 * 注意代码的健壮性 */ public double Power(double base, int exponent...原创 2019-05-07 11:51:29 · 111 阅读 · 0 评论 -
《剑指offer》第12题 打印1到最大的N位数(Java版答案)
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。示例:输入3打印1、2、3直到最大的3位数999。答案:需要考虑大数问题 方法一:常规思路 采用数组模拟加法/** * 方法一:考虑大数问题,采用数组模拟加法 * * @param n */ public void print1toN(int n) { ...原创 2019-05-07 11:53:30 · 152 阅读 · 0 评论 -
《剑指offer》第13题 在O(1)时间删除链表结点(Java版答案)
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)的时间删除该结点。答案:如果要遍历到要删除节点的上一个节点,再去删除,则需要O(n)的时间复杂度了因此我们考虑删除deletedNode的下一个节点,只是把下一个节点的值赋值给deletedNode,这样就相当于删除了deletedNode。注意deletedNode可能是尾节点,则只能遍历了。publi...原创 2019-05-07 11:54:16 · 100 阅读 · 0 评论 -
《剑指offer》第26题 复杂链表的复制(Java版答案)
题目:复制一个复杂链表。复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个指针可以指向链表中的任意一个结点或者null。答案:分三步1.根据原来的链表的每个结点N,创建对应的N',并将N'连接在N后面,组成一个链表2.对每个N'结点设置副结点,副结点为其前面结点N指向的副结点S,对应的next节点S’3.拆分新旧链表,返回新链表,第一个N节点的下一个结点N'即为新...原创 2019-06-09 11:49:19 · 134 阅读 · 0 评论