剑指Offer(第二版)
《剑指Offer:名企面试官精讲典型编程题》剖析了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。全书分为7章,主要包括面试的流程,讨论面试流程中每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算
VicterTian
这个作者很懒,什么都没留下…
展开
-
剑指offer第二版-26树的子结构
/** * 树的子结构 * <p> * 输入两棵二叉树A和B,判断B是不是A的子结构。 * <p> * 当A有一个节点与B的根节点值相同时,则需要从A的那个节点开始严格匹配,对应于下面的tree1HasTree2FromRoot函数。 * 如果匹配不成功,则返回到开始匹配的那个节点,对它的左右子树继续判断是否与B的根节点值相同,重复上述过程。 * 应注意,必须...原创 2019-02-26 22:10:01 · 291 阅读 · 0 评论 -
剑指offer第二版-31栈的压入弹出序列
/** * 栈的压入弹出序列 * <p> * 输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。 * 例如,压入序列为(1,2,3,4,5),序列(4,5,3,2,1)是它的弹出序列,而(4,3,5,1,2)不是。 * <p> * 对于一个给定的压入序列,由于弹出的时机不同,会出现多种弹出序列。 *...原创 2019-02-26 17:24:29 · 224 阅读 · 0 评论 -
剑指offer第二版-30包含min函数的栈
/** * 包含min函数的栈 * <p> * 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。 * 要求在该栈中,调用min,push及pop的时间复杂度都是o(1)。 * * @author VicterTian * @version V1.0 * @Date 2019/2/26 */class StackWithMin<T ext...原创 2019-02-26 11:07:45 · 362 阅读 · 0 评论 -
剑指offer第二版-25合并两个排序的链表
/** * 合并两个排序的链表 * * @author VicterTian * @version V1.0 * @Date 2019/2/25 */@SuppressWarnings("all")public class P145_MergeSortedLists { static class ListNode<T> { T val; ListNode n...原创 2019-02-25 08:45:38 · 204 阅读 · 0 评论 -
剑指offer第二版-24反转链表
/** * 反转链表 * <p> * 想要链表反转时不断裂,至少需要3个变量记录,pre,cur,post。 * 与前面的题目类似,初始化pre为null,cur为head,post为head.next。 * 初始化之前要注意检查链表的长度。 * * @author VicterTian * @version V1.0 * @Date 2019/2/25 */pu...原创 2019-02-25 08:26:46 · 272 阅读 · 0 评论 -
剑指offer第二版-23链表中环的入口节点
import java.util.*;/** * 一个链表中包含环,请找出该链表的环的入口结点。 * &lt;p&gt; * 解决此题需要两步操作 首先确定这个链表是否包含环,若包含环,求出它的入口节点 * * @author VicterTian * @version V1.0 * @Date 2019/2/24 */public class P139_EntryNodeO...原创 2019-02-25 08:08:25 · 230 阅读 · 0 评论 -
剑指offer第二版-22_1寻找链表的中间节点
/** * 寻找链表的中间节点 * @author VicterTian * @version V1.0 * @Date 2019/2/19 */public class P138_FindMidInLinkList { static class Node&lt;T&gt; { T data; Node&lt;T&gt; next; public Node(T dat...原创 2019-02-19 17:51:49 · 186 阅读 · 2 评论 -
剑指offer第二版-22链表中倒数第k个节点
/** * 链表中倒数第k个节点 * @author VicterTian * @version V1.0 * @Date 2019/2/19 */public class P134_KthNodeFromEnd { static class ListNode<T> { T val; ListNode<T> next; ListNode(T va...原创 2019-02-19 17:50:33 · 218 阅读 · 0 评论 -
剑指offer第二版-21调整数组顺序使奇数位于偶数前面
/** * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分 * <p> * 思路一:运用快速排序的思想,设置前后两个指针,分别从数组的前后两端开始遍历,前指针遇到偶数,后指针遇到奇数交换之。 * <p> * 思路二:因为快速排序是不稳定的排序,而题目要求稳定性。那么就要考虑冒泡排序和插入排...原创 2019-02-19 17:48:54 · 187 阅读 · 0 评论 -
剑指offer第二版-20表示数值的字符串
/** * 表示数值的字符串 * <p> * 判断一个字符串是否表示数值,如+100,5e2,-123,-1E-16都是,12e,1e3.14,+-5,1.2.3,12e+5.4都不是。 * 提示:表示数值的字符串遵循模式A[.[B]][e|EC] 或者 .B[e|EC];A,B,C表示整数,|表示或。[]表示可有可无。 * <p> * 此题也没有没什么特殊思路...原创 2019-02-19 17:47:15 · 216 阅读 · 0 评论 -
寻找和为定值的两个数
/** * 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 * 要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。 * 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 * <p> * 思路一:直接穷举,从数组中任意选取两个数,判定它们的和是否为输入的那个数字。此举复杂度为O(...原创 2019-02-16 22:40:06 · 258 阅读 · 0 评论 -
剑指offer第二版-17_1任意两个整数的加法
/** * 定义一个函数,在该函数中可以实现任意两个整数的加法 * &amp;lt;p&amp;gt; * 对于这道题,由于没有限定输入的两个数的范围,所以要按照大数问题来进行处理 * 由于题目要求是要实现任意两个整数的加法,我们就要考虑如何实现大数的加法,此外,两个数字是任意的,所以要考虑负数 * 对于大数问题,常用的方法就是使用字符串来表示这个大数,我们可以首先将两个整数用字符串进行表示,然后分别将...原创 2019-02-09 21:54:33 · 420 阅读 · 0 评论 -
剑指offer第二版-17打印从1到最大的n位数
/** * 打印从1到最大的n位数 * &lt;p&gt; * 如输入2,打印1,2......98,99 * 注意:本题需要考虑大数问题,用字符串解决大数问题是最好的解决方案之一 * 用字符串表示数字的时候,最直观的方法就是字符串里每个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位。因为最大的是n位的, * 因此我们需要一个长度为n+1的字符串(字符串中最后一个是结束符...原创 2019-02-09 21:52:46 · 453 阅读 · 0 评论 -
剑指offer第二版-16数值的整数次方
/** * 数值的整数次方 * &lt;p&gt; * 实现函数double power(double base,int exponent),求base的exponent次方。不能使用库函数,不需要考虑大数问题。 * 可能我们的第一想法永远是利用循环进行求值,如果要考虑到0和整数,可以将指数先求绝对值,然后算出结果后取倒数。 * 既然要求倒数,我们很自然的想到,有没有可能对0取倒数 *...原创 2019-02-09 21:51:09 · 250 阅读 · 0 评论 -
剑指offer第二版-15_2二进制中1的个数
/** * 实现一个函数,输入一个int型整数,输出该数字在计算机中二进制表示形式的1的个数。 * 例如9-&amp;gt;1001,输出2;-3-&amp;gt;11111111111111111111111111111101,输出31。 * * @author VicterTian * @version V1.0 * @Date 2019/2/8 */public class P100_Num...原创 2019-02-08 21:38:09 · 197 阅读 · 0 评论 -
剑指offer第二版-15_1进制转换
/** * 在Excel中,用A表示第一列,B表示第二列...Z表示第26列,AA表示第27列,AB表示第28列...依次列推。 * 请写出一个函数,输入用字母表示的列号编码,输出它是第几列。 * &lt;p&gt; * 思路:这道题实际上考察的是把二十六进制表示成十进制数字,将输入的字符串先转换成字符数组,遍历数组中的每一个字符, * 用这个字符减去A再加1就是该位对应的十进制数,然后...原创 2019-02-08 21:36:21 · 225 阅读 · 0 评论 -
剑指offer第二版-13机器人的运动范围
/** * 题目:机器人的运动范围 * 地上有一个m行n列的方格,一个机器人从坐标(0,0)的各自开始移动,它每次可以向上下左右移动一格,但不能进入横纵坐标数位之和大于k的格子。 * 例如,当k等于18时,机器人能进入(35,37),因为3+5+3+7=18;但却不能进入(35,38),因为3+5+3+8=19>18。 * 请问该机器人能够到达多少个格子。 * <p>...原创 2019-01-25 12:46:41 · 235 阅读 · 0 评论 -
剑指offer第二版-12矩阵中的路径
/** * 题目:矩阵中的路径 * 设计一个函数,用来判断一个矩阵中是否存在一条包含某字符串的路径。 * (1)起点随意;(2)路径的移动只能是上下左右; * (3)访问过的位置不能再访问。以下图矩阵为例,包含“bfce”,但是不包含“abfb”。 * a b t g * c f c s * j d e ...原创 2019-01-25 12:45:00 · 227 阅读 · 0 评论 -
剑指offer第二版-11旋转数组的最小数字
/** * 旋转数组的最小数字 * <p> * 题目要求: * 把一个数组最开始的若干个元素搬到末尾成为数组的旋转,如1,2,3,4,5=>3,4,5,1,2;0,1,1,1,1=>1,1,1,0,1;0,1,1,1,1=>1,0,1,1,1。 * 求一个原本递增的数组旋转后的最小数字。 * * @author VicterTian * @versio...原创 2019-01-25 12:43:09 · 172 阅读 · 0 评论 -
剑指offer第二版-10_5员工年龄排序
/** * 对公司所有员工的年龄进行排序,公司总共有几万名员工,要求时间复杂度为O(n),可使用的空间复杂度为常量大小,不得超过O(n) * * @author VicterTian * @version V1.0 * @Date 2019/1/24 */public class P81_AgeSort { public static void main(String[] args...原创 2019-01-24 19:41:09 · 365 阅读 · 0 评论 -
剑指offer第二版-10_4矩形覆盖
/** * 矩形覆盖 * * 问题描述: * 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 * 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形, * 总共有多少种方法? * * 问题思路: * 当n=1的时候,只有一个2*1的矩形,所以只有一种方法,记为f(1)=1 * 当n=2的时候,是两个2*1的矩形,这时候具有两种方式去覆盖这个矩形了(这时候应该是一个正...原创 2019-01-23 15:17:00 · 264 阅读 · 0 评论 -
剑指offer第二版-10_3青蛙跳台阶扩展
/** * 青蛙跳台阶扩展 * <p> * 在青蛙跳台阶时问题中,如果把条件改成:一只青蛙可以跳1级台阶,也可以跳2、3、、、n级台阶,有多少种跳法 * 现在我们用数学归纳法来分析一下这个变种问题: * <p> * 首先,当n=1时,只有一种跳法 f(1)=1。 * <p> * 其次,当n=2时,有两种跳法,每次跳1阶,或者一次性跳2阶。f(2...原创 2019-01-23 15:15:38 · 552 阅读 · 0 评论 -
剑指offer第二版-10_2青蛙跳台阶
/** * 青蛙跳台阶问题 * <p> * 如果只有一级台阶,只有一种跳法,如果有两级台阶,那就有两种跳法。 * 将问题扩大化,如果有n级台阶,每一跳有两种可能 * 如果第一次只跳一级台阶,那么跳法数目等于后面(n-1)的跳法数目 * 如果第一次跳了两级台阶,那么跳法数目等于后面(n-2)的跳法数目 * 因此,n级台阶的不同跳法 总数就等于f(n) = f(n-1) + ...原创 2019-01-23 15:12:35 · 388 阅读 · 0 评论 -
剑指offer第二版-10_1斐波那契数列
/** * 斐波那契数列 * 作为最经典的递归题目,斐波那契大家都不会太陌生,但是如果只用递归,会造成很大的时间和空间消耗,所以递归并不是最好的办法,时间复杂度为o(n^2) * 我们要避免重复,可以把计算出来的值存储起来,就不用再进行重复计算的,这样的话时间复杂度为O(n)9 * 我们还可以用等比数列的公式进行计算,时间复杂度为O(nlogn) * 最简单的,还可以用通项公式进行计算,...原创 2019-01-23 15:10:31 · 361 阅读 · 0 评论 -
剑指offer第二版-7_3用单队列实现栈
/** * 利用一个队列实现栈 * <p> * 插入操作与之前一样,对于弹出操作,假设队列长度为n(假设存储内容为头2,5,1,3,4尾), * 对从队头poll出来的元素执行offer存入队尾,依次进行n-1次poll与offer(此时存储的内容为头4,2,5,1,3尾), * 然后再执行一次poll(此时为2,5,1,3),即完成了自实现栈的弹出。 * 这样将在时间不变...原创 2019-01-23 12:31:22 · 170 阅读 · 1 评论 -
剑指offer第二版-7_2用双队列实现栈
/** * 用两个队列实现栈 * <p> * (1)对于插入操作,栈与队列都是从队尾进行,因此很容易完成。但是一定要保证有一个队列是空的 *(2)对于弹出操作,队列从队头开始,而栈从队尾开始,要想取到队尾元素,需要第二个队列的协助: * 假设queue1不为空,queue2为空,将queue1的原书依次取出放到queue2中,同时判断,当queue1的长度为1时,不要将该元素...原创 2019-01-23 12:30:10 · 173 阅读 · 0 评论 -
剑指offer第二版-7_1用两个栈实现队列
/** * 用两个栈实现队列 * <p> * (1)对于插入操作,栈与队列都是从队尾进行,因此一行代码就可以完成push() * (2)对于弹出操作,队列先进先出从队头开始,而栈后进先出从队尾开始, * 要想取到队头元素,就得需要第二个栈stack2的协助:弹出时将stack1的元素依次取出放到stack2中 * 此时stack2进行弹出的顺序就是整个队列的弹出顺序。而如果...原创 2019-01-23 12:28:07 · 148 阅读 · 0 评论 -
剑指offer第二版-6从尾到头打印链表
题目:从尾到头打印链表思路:遍历的顺序是从过头到尾,输出顺序是从尾到头,这是一个典型的后进先出,我们可以用栈来实现相关操作。每经过一个节点时,把该结点放入一个栈中。当遍历完整个链表后,再从栈顶逐个输出节点的值。既然是个栈结构,我们自然也可以想到递归但是基于递归的代码看起来很简洁,但有个问题:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出所以显式用栈基于循环...原创 2019-01-23 12:23:39 · 130 阅读 · 0 评论 -
剑指offer第二版-5_1有序数组插入
题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有数字是排序的代码:/** * 有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有数字是排序的 * 归并排序的简单实现 * * @author VicterTian * @vers...原创 2019-01-19 22:16:27 · 226 阅读 · 0 评论 -
剑指offer第二版-5替换空格
题目:实现一个函数,把字符串中的每个空格替换成“%20”代码:/** * 实现一个函数,把字符串中的每个空格替换成“%20”。 * 通过按传统办法,假设字符的长度是n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符串而言总的时间效率是O(n2) * 在前面的分析中,我们发现数组中的很多字符都移动了很多次,能不能减少移动的次数呢?我们换一种思路,把从前向后替换成从...原创 2019-01-19 21:25:04 · 532 阅读 · 0 评论 -
剑指offer第二版-4二维数组中的查找
题目:在一个二维数组中,每一行按照从左到右递增的顺序排列,每一列按照从上到下递增的顺序排列,输入一个二维数组和整数,判断数组中是否含有该整数思路:如果按常规想法,可以把二维数组画成矩形,然后从数组中选取一个数字,如果这个数字与要查找的数字相等,结束查找过程。如果选取的数字小于要查找的数字,那么要查找的数字就在这个数字的右边或者下边。同样地,如果要查找的数字大于这个数字,那么应该选取当前数字右...原创 2019-01-19 20:12:30 · 170 阅读 · 0 评论 -
剑指offer第二版-3数组中重复的数
题目:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字的重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如输入长度为七的数组{2,3,1,0,2,5,3},那么对应的输出重复数字为数字2或数字3代码:/** * 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字的重复的,但不知道有几个数字重复了, *...原创 2019-01-19 19:57:30 · 164 阅读 · 0 评论 -
剑指offer第二版-2实现Singleton模式
话不多说,请看代码/** * 单利模式 * 设计模式在面向de程序中单例模式中起着举足轻重的地位,而单例模式是唯一一个能用几十行代码完全实现的模式,所以Singleton在面试中具有非常重要的地位 * 定义:实现了特殊模式的类,该类仅能被实例化一次,产生唯一的对象,并且提供了一个全局的访问点 * 应用场景:windows的任务管理器,回收站,web应用的配置对象,Spring中的bean...原创 2019-01-18 20:13:12 · 269 阅读 · 0 评论 -
剑指offer第二版-1字符串转数字
题目:把字符串转换成整数思路:本地难度不大,但是要考虑的特殊情况较多如果是空串或null,要特殊处理;如果头部有正负号,要特殊处理;如果数值超出int的范围,要特殊处理;比int的最大值还要大,已经上溢,这肯定不能通过数字的大小比较,所以需要在字符串的状态下判断是否上溢或下溢。遇到非数字的字符,则转换停止;/** * 把一个字符串转换为整数 * * @author Victe...原创 2019-01-18 20:07:18 · 334 阅读 · 0 评论