剑指offer
学习名企面试官精讲典型编程题,源码地址
<a href="https://github.com/li-yazhou/algorithm-primer/blob/master/interview-for-offer/README.md"> 剑指offer--Java实现 </a>
LYZ0907
SHOW YOUR CODE.
展开
-
剑指offer 面试题65 滑动窗口的最大值
面试题65 滑动窗口的最大值题目: 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小 3, 那么移动存在 6 个滑动窗口,它们的最大值分别为 {4, 4, 6, 6, 6, 5}。package foroffer.top70;import java.util.Arr原创 2017-08-21 10:49:16 · 822 阅读 · 0 评论 -
剑指offer 面试题63 二叉搜索树的第 k 个结点
剑指offer 面试题63 二叉搜索树的第 k 个结点题目: 给定一棵二叉搜索树,请找出其中的第 k 大的结点。 例如下面的二叉树中,按结点数值大小升序顺序,第三个结点的值是 7。 8 / \ 6 10 / \ / \ 5 7 9原创 2017-08-20 09:47:16 · 603 阅读 · 0 评论 -
剑指offer 面试题61 按之字形顺序打印二叉树
剑指offer 面试题61 按之字形顺序打印二叉树题目:请实现一个函数按照之字型顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:按之字形顺序打印下面的二叉树的结果为:13 24 5 6 715 14 13 12 11 10 9 8 1 / \原创 2017-06-19 11:05:31 · 497 阅读 · 0 评论 -
剑指offer 面试题62 序列化和反序列化二叉树
剑指offer 面试题62 序列化和反序列化二叉树 题目: 请实现两个函数,分别用来序列化和反序列化二叉树。package algorithm.ac.foroffer.top70;import org.junit.Test;import java.util.LinkedList;/** * description: * * @author liyazhou * @create原创 2017-06-19 16:22:10 · 570 阅读 · 0 评论 -
剑指offer 面试题64 数据流中的中位数
剑指offer 面试题64 数据流中的中位数 题目: 如何得到一个数据流中的中位数? 如果从数据流中读出期数个数值,那么中位数就是所有数值排序之后位于中间的数值。 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。package algorithm.ac.foroffer.top70;import org.junit.Test;import原创 2017-06-19 20:51:51 · 388 阅读 · 0 评论 -
剑指offer面试题汇总-Java实现
剑指offer面试题汇总-Java实现 说明:参考DERRANTCM的剑指offer学习专栏的排版。 DERRANTCM是我的学习榜样,他的博客给予我极大的帮助。感谢你!让我们一起分享知识,创造快乐!目录第01-10题面试题2 实现单例模式面试题3 二维数组中的查找面试题4 替换空格面试题5 从尾到头打印链表面试题6 重建二叉树面试题6 重建二叉树2面试题7 用两个栈实现队列面试题8 旋原创 2017-05-24 10:51:50 · 1678 阅读 · 0 评论 -
剑指offer 面试题57 删除链表中重复的结点
剑指offer 面试题57 删除链表中重复的结点 题目: 在一个排序的链表中,如何删除重复的结点? 例如,链表 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5, 删除重复结点后为 1 -> 2 - > 3 -> 4 -> 5package algorithm.foroffer.top60;import org.junit.Test;/** * descrip原创 2017-06-18 15:31:35 · 564 阅读 · 0 评论 -
剑指offer 面试题58 二叉树的下一个结点
剑指offer 面试题58 二叉树的下一个结点 题目: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。 例如,下图的中序遍历序列为 3, 1, 7, 4, 8, 0, 5, 2, 6。 0 / \ 1 2原创 2017-06-18 19:45:40 · 723 阅读 · 0 评论 -
剑指offer 面试题59 对称的二叉树
剑指offer 面试题59 对称的二叉树题目:请实现一个函数,用来判断一颗二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,下图中第一棵二叉树是对称的,另外两棵不是。 8 8 7 / \ / \ / \ 6原创 2017-06-18 20:46:42 · 1194 阅读 · 0 评论 -
剑指offer 面试题55 字符流中第一个不重复的字符
剑指offer 面试题55 字符流中第一个不重复的字符 题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符 “go” 时,第一个只出现一次的字符是 “g”, 当从该字符串中读出前六个字符 “google” 时,第一个只出现一次的字符是 “l”。package algorithm.foroffer.top60;import org原创 2017-06-18 11:52:18 · 557 阅读 · 0 评论 -
剑指offer 面试题56 链表中环的入口结点
剑指offer 面试题56 链表中环的入口结点 题目: 一个链表中包含环,如何找出环的入口结点? 例如,在链表 1 -> 2 -> 3 -> 4 -> 5 -> 6,其中 6 指向3, 则该链表中环的入口结点是 3。package algorithm.foroffer.top60;import org.junit.Test;/** * description: *原创 2017-06-18 15:11:31 · 570 阅读 · 0 评论 -
剑指offer 面试题46 求 1+2+3+...+n (不使用乘除以及条件判断语句求前 n 项正整数的和)
剑指offer 面试题46 求 1+2+3+…+n 题目: 求 1+2+…+n。要求不能使用乘除法、for、while、if、else、switch、case等关键字 及条件判断语句。package algorithm.foroffer.top50;import org.junit.Test;/** * description: * * @author liyazhou *原创 2017-06-04 17:20:53 · 839 阅读 · 0 评论 -
剑指offer 面试题47 不用加减乘除做加法
剑指offer 面试题47 不用加减乘除做加法 题目: 写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算。package algorithm.foroffer.top50;import org.junit.Test;/** * description: * * @author liyazhou * @create 2017-06-03 22:01 * * 面原创 2017-06-04 19:46:43 · 421 阅读 · 0 评论 -
剑指offer 面试题48 不能被继承的类
剑指offer 面试题48 不能被继承的类 题目: 用 C++设计一个不能被继承的类。package algorithm.foroffer.top50;/** * description: * * @author liyazhou * @create 2017-06-04 19:49 * 面试题 48:不能被继承的类 * * 题目: * 用 C++设计一个不能被原创 2017-06-04 19:54:33 · 422 阅读 · 0 评论 -
剑指offer 面试题49 把字符串转换成整数
剑指offer 面试题49 把字符串转换成整数 题目:把字符串转换成整数package algorithm.foroffer.top50;import org.junit.Test;/** * description: * * @author liyazhou * @create 2017-06-04 19:54 * * 面试题 49:把字符串转换成整数 * * 考查点: *原创 2017-06-04 21:20:57 · 462 阅读 · 0 评论 -
剑指offer 面试题50 树中两个结点的最低公共祖先
剑指offer 面试题50 树中两个结点的最低公共祖先 题目:给出一棵树的根结点和树中的两个结点,找到这两个结点的最低公共祖先结点。 如下面的树中,给出根结点0以及5和7两个结点,找到5、7的最低公共祖先,结果是1。 0 / \ 1 2 / \ 3 4 / \ / | \原创 2017-06-05 21:18:14 · 533 阅读 · 0 评论 -
剑指offer 面试题51 数组中重复的数字
剑指offer 面试题51 数组中重复的数字 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道 每个数字重复了几次。请找出数组中任意一个重复的数字。例如, 如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应 的输出是重复的数字 2 或者 3。package al原创 2017-06-06 17:36:22 · 468 阅读 · 0 评论 -
剑指offer 面试题52 构建乘积数组
剑指offer 构建乘积数组 题目: 给定一个数组 A[0, 1, …, n-1],请构建一个数组 B[0, 1, …, n-1], 其中 B 中的元素 B[i] = A[0] * A[1] * A[2] * … * A[i+1] * A[i+2]。 不能使用除法运算。package algorithm.foroffer.top60;import org.junit.Test;原创 2017-06-06 19:36:06 · 357 阅读 · 0 评论 -
剑指offer 面试题60 把二叉树打印成多行
剑指offer 面试题60 把二叉树打印成多行 题目: 从上到下按层打印二叉树,同一层的结点按从左到右顺序打印, 每一层打印到一行。例如下面的二叉树的结果为: 8 / \ 6 10 / \ / \ 5 7 9原创 2017-06-08 19:10:23 · 996 阅读 · 0 评论 -
剑指offer 面试题63 二叉搜索树的第 k 个结点
剑指offer 面试题63 二叉搜索树的第 k 个结点 题目: 给定一棵二叉搜索树,请找出其中的第 k 大的结点。 例如下面的二叉树中,按结点数值大小升序顺序,第三个结点的值是 7。 8 / \ 6 10 / \ / \ 5 7 9 11package algorith原创 2017-06-08 20:20:39 · 489 阅读 · 0 评论 -
剑指offer 面试题42 翻转单词顺序 VS 左旋转字符串
剑指offer 面试题 翻转单词顺序 VS 左旋转字符串 题目一: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 为简单起见,标点符号和普通字母一样处理。 例如输入字符串”I am a student.”,则输出”student. a am I”。 题目二: 字符串的左悬殊操作是把字符串前面的若干原创 2017-06-02 19:34:28 · 520 阅读 · 0 评论 -
剑指offer 面试题43 n个骰子的点数 - null
剑指offer 面试题43 n个骰子的点数 - null 题目: 把 n 个骰子仍在地上,所有骰子朝上一面的点数之和为 s。 输入 n,打印出 s 的所有可能的值出现的次数。package algorithm.foroffer.top50;/** * description: * * @author liyazhou * @create 2017-06-原创 2017-06-02 20:12:13 · 462 阅读 · 0 评论 -
剑指offer 面试题44 扑克牌的顺子
剑指offer 面试题44 扑克牌的顺子 从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2~10为数字本身, A 为 1,J 为 11,Q 为 12,K 为13,而大、小王可以看成任意数字。package algorithm.foroffer.top50;import org.junit.Test;import java.util.*;/** * descr原创 2017-06-03 20:40:49 · 807 阅读 · 0 评论 -
剑指offer 面试题45 圆圈中最后剩下的数字
剑指offer 面试题45 圆圈中最后剩下的数字 题目: 0, 1, 2, …, n-1 这 n 个数字排成一个圆圈,从数字 0 开始每次从这个圆圈里删除第 m 个数字。 求出这个圆圈里剩下的最后一个数字。package algorithm.foroffer.top50;import org.junit.Test;import java.util.ArrayLi原创 2017-06-03 21:31:57 · 1182 阅读 · 0 评论 -
剑指offer 面试题41 和为 s 的两个数字 VS 和为 s 的连续正数序列
剑指offer 和为 s 的两个数字 VS 和为 s 的连续正数序列 题目一: 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是 s。 如果有多对数字的和等于 s, 输出任意一对即可。 例如,输入数组 {1, 2, 4, 7, 11, 15}和数字15,输出 4,7。 题目二: 输入一个正数 s,原创 2017-06-02 11:17:00 · 978 阅读 · 0 评论 -
剑指offer 面试题38 数字在排序数组中出现的次数
剑指offer 面试题38 数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。例如输入排序数组 {1,2,3,3,3,3,4,5} 和数字 3, 由于 3 在这个数组中出现了 4 次,因此输出 4。package algorithm.foroffer.top40;import org.junit.Test;import java.util.Arrays;/** * des原创 2017-06-01 13:51:13 · 474 阅读 · 0 评论 -
剑指offer 面试题39 二叉树的深度
剑指offer 面试题39 二叉树的深度 题目一: 输入一棵二叉树的根结点。求该树的深度。从根结点到叶结点依次经过的结点 (含根、叶结点)形成的树的一条路径,最长路径的长度为树的深度。 题目二: 输入一棵二叉树的根结点,判断该树是不是平衡二叉树。 如果某二叉树中的任意结点的左右子树的深度相差不超过 1, 那么它就是一棵平衡二叉原创 2017-06-01 15:10:07 · 490 阅读 · 0 评论 -
剑指offer 面试题40 数组中只出现一次的数字
剑指offer 面试题40 数组中只出现一次的数字 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出两个只出现了一次的数字。要求时间复杂度是 O(n),空间复杂度是 O(1)package algorithm.foroffer.top40;import org.junit.Test;import java.util.Arrays;/** * description原创 2017-06-01 21:18:43 · 959 阅读 · 0 评论 -
剑指offer 面试题21 包含 min 函数的栈
剑指offer 面试题21 包含 min 函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数, 在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。package algorithm.foroffer.top30;import java.util.Stack;/** * Created by liyazhou o原创 2017-05-27 21:50:11 · 413 阅读 · 0 评论 -
剑指offer 面试题22 栈的压入、弹出序列
剑指offer 面试题22 栈的压入、弹出序列 题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不相等。 例如序列 1、2、3、4、5 是某栈的压栈序列,序列 4、5、3、2、1 是该压栈序列对应的一个弹出序列, 但 4、3、5、1、2 就不可能是该压栈序列的弹出序列。package algor原创 2017-05-28 10:27:18 · 949 阅读 · 0 评论 -
剑指offer 面试题23 从上到下打印二叉树
剑指offer 面试题23 从上到下打印二叉树 题目: 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 例如输入下图的二叉树,则依次打印出 8、6、10、5、7、9、11.package algorithm.foroffer.top30;import java.util.LinkedList;import java.util.Queue;/** * Cre原创 2017-05-28 10:58:53 · 505 阅读 · 0 评论 -
剑指offer 面试题24 二叉搜索树的后序遍历序列
剑指offer 面试题24 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回 true,否则返回 false。 假设输入的数组的任意两个数字都互不相同。package algorithm.foroffer.top30;/** * Created by liyazhou on 2017/5/28. * 面试题2原创 2017-05-28 13:39:41 · 455 阅读 · 0 评论 -
剑指offer 面试题25 二叉树中和为某一值的路径-Java实现
剑指offer 面试题25 二叉树中和为某一值的路径-Java实现 题目: 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树的定义如下:package algorithm.foroffer.top30;import java.util.Iterator;import java.util.St原创 2017-05-28 17:36:07 · 628 阅读 · 0 评论 -
剑指offer 面试题26 复杂链表的复制
剑指offer 面试题26 复杂链表 题目: 请实现函数 ComplexListNode clone(ComplexListNode head), 复制一个复杂链表。在复杂链表中,每个结点除了有一个指向下一个结点的指针外, 还有一个指向链表中的任意结点或者 null。结点的定义如下:package algorithm.foroffer.top30;/** * Created原创 2017-05-28 20:14:47 · 429 阅读 · 0 评论 -
剑指offer 面试题27 二叉搜索树与双向链表
剑指offer 面试题27 二叉搜索树与双向链表 面试题: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 要求不能创建任何新的结点,只能调整树中结点指针的指向。 比如输入下图中左边的二叉搜索树,则输出转换之后的排序双向链表。package algorithm.foroffer;/** * Created by liyazhou on 2017/5/28.原创 2017-05-29 11:10:22 · 455 阅读 · 0 评论 -
剑指offer 面试题28 字符串的排列与集合的所有子集
剑指offer 面试题28 字符串的排列 题目: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串 abc,则打印出 a、b、c 所能排列出来的所有字符串 abc、acb、bac、bca、cab 和 cba。package algorithm.foroffer.top30;/** * Created by liyazhou on 2017/5/29. *原创 2017-05-29 11:48:00 · 665 阅读 · 0 评论 -
剑指offer 面试题29 数组中出现次数超过一半的数字
剑指offer 面试题29 数组中出现次数超过一半的数字 题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为 9 的数组 {1, 2, 3, 2, 2, 2, 5, 4, 2}。 由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2。package algorithm.foroffer.top30;/** *原创 2017-05-29 16:32:15 · 497 阅读 · 0 评论 -
剑指offer 面试题30 最小的 k 个数
剑指offer 面试题30 最小的 k 个数 题目: 输入 n 个整数,找出其中最小的 k 个数。 例如输入 4、5、1、6、2、7、3、8 这 8 个数字,则最小的 4 个数是 1、2、3、4。package algorithm.foroffer.top30;import java.util.*;/** * Created by liyazhou on 2017/5/29.原创 2017-05-29 17:21:18 · 696 阅读 · 0 评论 -
剑指offer 面试题31 连续子数组的最大和
剑指offer 面试题31 连续子数组的最大和 题目: 输入一个整型数组,数组里有正数也有负数。数组中一个或者连续的多个整数组成一个子数组。 所有子数组的和的最大值。要求时间复杂度是 O(n)。package algorithm.foroffer.top40;import java.util.Arrays;/** * Created by liyazhou on 2017/5原创 2017-05-29 19:53:23 · 442 阅读 · 0 评论 -
剑指offer 面试题32 从 1 到 n 整数中 1 出现的次数
剑指offer 面试题32 从 1 到 n 整数中 1 出现的次数 题目: 输入一个整数 n,求从 1 到 n 这 n 个整数中的十进制表示中 1 出现的次数。 例如输入 12, 从 1 到 12 这些整数中包含 1 的数字有 1,10,11 和 12, 1 一共出现了 5 次。package algorithm.foroffer.top40;/** * Created b原创 2017-05-30 11:09:02 · 375 阅读 · 0 评论