剑指offer
步步为营, 学习算法, 希望能够坚持快速刷完
littlehaes
这个作者很懒,什么都没留下…
展开
-
剑指offer面试题3(java版):数组中重复的数字
welcome to my blog面试题3_数组中重复的数字思路逐个位置判断, 对于当前位置, 要么numbers[i] == i; 要么numbers[i] != i如果numbers[i] != i, 要么numbers[numbers[i]] == numbers[i], 返回true; 要么numbers[numbers[i]] != numbers[i], 交换索引为i和索...原创 2019-06-10 16:20:23 · 326 阅读 · 0 评论 -
剑指offer面试题4(java版):二维数组中的查找
welcome to my blog面试题4:二维数组中的查找思路比较右上角的数字和要查找的数字的大小关系如果右上角的数字大于要查找的数字, 则忽略右上角数字所在的列如果右上角的数字小于要查找的数字, 则忽略右上角数字所在的行复杂度时间复杂度:空间复杂度:public class Solution { public boolean Find(int target...原创 2019-06-10 16:21:18 · 176 阅读 · 0 评论 -
剑指offer面试题5(java版):替换空格
welcome to my blog面试题5:替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路先明确需求.如果实在原来的字符串上进行替换,就有可能覆盖修改在该字符串后面的内存; 如果是创建新的字符串并在新的字符串上进行替换,那么就可以自己分配足够多的的内存...原创 2019-06-10 16:22:36 · 215 阅读 · 0 评论 -
剑指offer面试题6(java版):从尾到头打印链表
welcom to my blog面试题6:从尾到头打印链表题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList思路先进后出:栈结构, LinkedList可以实现栈数据结构稍微注意一下泛型问题复杂度时间复杂度:O(n)空间复杂度:O(n)import java.util.ArrayList;import java.util.LinkedList;pu...原创 2019-06-10 16:27:43 · 339 阅读 · 0 评论 -
剑指offer面试题7(java版):重建二叉树
welcome to my blog剑指offer面试题7(java版):重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路画图思考不容易越界体会递归思想本题在递归中传递的参数...原创 2019-06-10 16:28:44 · 181 阅读 · 0 评论 -
剑指offer面试题8(java版):二叉树的下一个节点
welcome to my blog剑指offer面试题8(java版):二叉树的下一个节点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针思路要弄清楚中序遍历具体思路见注释复杂度时间复杂度: 和数的深度有关空间复杂度: 没有分配额外的空间, O(1)/*public clas...原创 2019-06-10 16:47:56 · 119 阅读 · 0 评论 -
剑指offer面试题9(java版):用两个栈实现队列
welcome to my blog剑指offer面试题9(java版):用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路创建两个栈stack1, stack2stack1只负责添加元素stack2只负责删除元素; 当stack2不为空时直接pop()栈顶元素即可, 当stack2为空时,先把stack1中的元素压入s...原创 2019-06-10 16:48:34 · 161 阅读 · 0 评论 -
剑指offer面试题10(java版):斐波那契数列
welcome to my blog剑指offer面试题10(java版):斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路递归求解会存在大量重复使用循环求解, 注意找准当前项的前两项, 对应到代码中是fibMinus1, fibMinus2复杂度public class Solut...原创 2019-06-10 16:49:21 · 298 阅读 · 0 评论 -
剑指offer面试题11(java版):旋转数组的最小数字
welcome to my blog剑指offer面试题11(java版):旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路见注释...原创 2019-06-10 16:50:07 · 197 阅读 · 0 评论 -
剑指offer面试题12(java版):矩阵中的路径
welcome to my blog剑指offer面试题12(java版):矩阵中的路径题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 ...原创 2019-06-10 16:50:55 · 295 阅读 · 0 评论 -
剑指offer面试题13(java版):机器人的运动范围
welcome to my blog剑指offer面试题13(java版):机器人的运动范围题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+...原创 2019-06-11 09:08:06 · 385 阅读 · 0 评论 -
剑指offer面试题14(java版):剪绳子
welcome to my blog剑指offer面试题14(java版):剪绳子题目描述给你一根长为n的绳子, 请把绳子剪成m段(m,n都是整数, n>1, m>1), 每段绳子的长度记为k[0],k[1],…,k[m]. 请问k[0]*k[1]*…k[m]可能最大的乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18思路...原创 2019-06-11 09:08:47 · 507 阅读 · 0 评论 -
剑指offer面试题15(java版):二进制中1的个数
welcome to my blog剑指offer面试题15(java版):二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路逻辑运算优先级很低,注意加括号不要让n右移, 因为如果n是负数的话,右移的过程中最高位会补1,导致结果错误甚至是死循环应该让flag左移, 当flag中的1处于最高位时,再左移一次,flag将会变成0注意int型的...原创 2019-06-11 09:09:26 · 166 阅读 · 0 评论 -
剑指offer面试题16(java版):数值的整数次方
welcome to my blog剑指offer面试题16(java版):数值的整数次方题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路按base和exponent取值分情况讨论, 具体见注释当exponent为负数时,要注意将base取倒数,同时将exponent变成正数,表示base自乘exponent次...原创 2019-06-11 09:10:05 · 238 阅读 · 0 评论 -
剑指offer面试题17(java版):打印从1到最大的n位数
welcome to my blog剑指offer面试题17(java版):打印从1到最大的n位数题目要求输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1,2,3,…,999思路本题最大的难点在于n取非常大时,int, long 都不够用的时候, 得用string表示 (大数问题)对字符串形式的数字加一时要考虑的细节较多, 具体见注释打印时如何找出第一个非零...原创 2019-06-11 09:10:42 · 709 阅读 · 0 评论 -
剑指offer面试题18(java版):删除链表的节点
welcome to my blog剑指offer面试题18(java版):删除链表的节点务必掌握题目二的进阶代码题目二的进阶代码题目二的进阶代码(递归版本)题目一描述在O(1)时间内删除链表节点.给定单向链表的头指针和一个节点指针, 定义一个函数在O(1)时间内删除该节点.链表节点定义如下: public class ListNode { int val; Lis...原创 2019-06-11 09:11:25 · 527 阅读 · 0 评论 -
剑指offer面试题19(java版):正则表达式匹配
welcome to my blog剑指offer面试题19(java版):正则表达式匹配题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配笔记...原创 2019-06-11 09:12:29 · 684 阅读 · 6 评论 -
剑指offer面试题20(java版):表示数值的字符串
welcome to my blog剑指offer面试题20(java版):表示数值的字符串要掌握非正则表达式的版本题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。笔记正则表达式中...原创 2019-06-11 09:13:06 · 549 阅读 · 0 评论 -
剑指offer面试题21(java版):调整数组顺序使奇数位于偶数前面
welcome to my blog剑指offer面试题21(java版):调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。笔记数组问题, 输入的数组长度可以为0, 这并不是异常java中函数能作为参数吗? (试试内部类)下...原创 2019-06-11 09:13:44 · 272 阅读 · 0 评论 -
剑指offer面试题22(java版):链表中倒数第K个节点
welcome to my blog剑指offer面试题22(java版):链表中倒数第K个节点题目描述输入一个链表,输出该链表中倒数第k个结点。笔记要进行健壮性判断: 输入的节点为null; k<=0都是异常情况复杂度时间复杂度: O(n)空间复杂度: O(1)public class Solution { public ListNode FindKthT...原创 2019-06-11 09:14:18 · 350 阅读 · 0 评论 -
剑指offer面试题23(java版):链表中环的入口节点
welcome to my blog剑指offer面试题23(java版):链表中环的入口节点题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路(和寻找倒数第K个节点的思路有类似)先判断是否有环有环的话再判断环中的节点个数利用类似"链表中倒数第K个节点"的思路找到环的入口笔记判断是否有环时, 需要创建两个指针, fast, slow. 其...原创 2019-06-12 08:48:40 · 243 阅读 · 0 评论 -
剑指offer面试题24(java版):反转链表
welcome to my blog剑指offer面试题24(java版):反转链表题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null最初版的代码如下, while循环中很不好, 其实从初始化Next就注定了这个while写不好了不要根据初始化写代码, 而是根据分析问题时的步骤写代码反转链表的子过程: 1.保存Curr.next 2.改变Curr.next...原创 2019-06-12 08:49:39 · 193 阅读 · 0 评论 -
剑指offer面试题25(java版):合并两个排序的链表
welcome to my blog剑指offer面试题25(java版):合并两个排序的链表思路在一个循环中操作, 每一次循环都找处两个链表中值更小的节点作为头结点, 缩短链表继续下一轮循环典型的递归过程自制的简陋递归版代码(无return), 放弃这个版本public class Solution { public ListNode Merge(ListNode lis...原创 2019-06-12 08:50:17 · 203 阅读 · 0 评论 -
剑指offer面试题26(java版):树的子结构
welcome to my blog剑指offer面试题26(java版):树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)笔记常规情况: 判断A的某个节点值和root2.val是否相等, 是的话判断当前节点的左节点值和root2.left.val是否相等, 当前节点的右节点值和root2.right.val是否相等. 如此递...原创 2019-06-12 08:50:55 · 387 阅读 · 0 评论 -
剑指offer面试题27(java版):二叉树的镜像
welcome to my blog剑指offer面试题27(java版):二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。思路使用递归只要当前节点不是null, 就交换其左右子节点不带返回值的递归public class Solution { public void Mirror(TreeNode root) { if(root !=...原创 2019-06-12 08:51:31 · 253 阅读 · 0 评论 -
剑指offer面试题28(java版):对称的二叉树
welcome to my blog剑指offer面试题28(java版):对称的二叉树题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路自定义后序遍历:根右左在考虑叶子节点的left和right的情况下(也就是考虑null), 如果前序遍历和后序遍历的结果相同, 那么二叉树是对称的public class ...原创 2019-06-12 08:52:09 · 459 阅读 · 0 评论 -
剑指offer面试题29(java版):顺时针打印矩阵
welcome to my blog剑指offer面试题29(java版):顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路主要是要弄清楚打...原创 2019-06-12 08:52:59 · 232 阅读 · 0 评论 -
剑指offer面试题30(java版):包含min函数的栈
welcome to my blog剑指offer面试题30(java版):包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))笔记声明并初始化栈 Stack s = new Stack(); 一般都要加上泛型, 要不默认元素类型为Objects.pedk():查看栈顶元素但并不弹出思路创建一个辅助栈,...原创 2019-06-12 08:53:33 · 301 阅读 · 0 评论 -
剑指offer面试题31(java版):栈的压入,弹出序列
welcome to my blog剑指offer面试题31(java版):栈的压入,弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度...原创 2019-06-12 08:54:05 · 188 阅读 · 1 评论 -
剑指offer面试题32(java版):从上到下打印二叉树
welcome to my blog剑指offer面试题32(java版):从上到下打印二叉树题目一从上往下打印出二叉树的每个节点,同层节点从左至右打印。笔记Deque类是接口, 不能实例化, 需要借助实现了Deque接口的子类, 比如LinkedList. 如下Deque d = new LinkedList();不要忘记引入import java.util.Deque;和 im...原创 2019-06-12 08:54:42 · 309 阅读 · 0 评论 -
剑指offer面试题33(java版):二叉搜索树的后续遍历
welcome to my blog剑指offer面试题33(java版):二叉搜索树的后续遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同笔记如果面试题要求处理一棵二叉树的遍历序列,可以先找到二叉树的根节点再基于根节点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列...原创 2019-06-19 09:59:48 · 177 阅读 · 0 评论 -
剑指offer面试题34(java版):二叉树中和为某一值的路径
welcome to my blog剑指offer面试题34(java版):二叉树中和为某一值的路径题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路通过递归所有的路径, 判断路径上的值的和是否满足条件如果某一条路径不满足...原创 2019-06-19 10:01:58 · 161 阅读 · 0 评论 -
剑指offer面试题35(java版):复杂链表的复制
welcome to my blog剑指offer面试题35(java版):复杂链表的复制笔记这道题卡了很久, 因为最后拆分链表的时候, 我只提取了复制后的链表, 没有管原先的链表, 结果就判错了是不是判题的机制有问题?注意random为null的情况, 此时random没有next. even.random = odd.random == null? null: odd.random...原创 2019-06-19 10:02:37 · 204 阅读 · 0 评论 -
剑指offer面试题36(java版):二叉树与双向链表
welcome to my blog剑指offer面试题36(java版):二叉树与双向链表笔记使用递归函数处理某个节点和在递归函数内部处理该节点的左右子节点是不同的思考维度, 别弄混了题目要求不创建新节点, 注意理解这句话, 仍然能够创建TreeNode类型的指针思路使用递归通用逻辑: 处理一个某一个节点; 将该节点与其左右子树连接; 返回合并后的双向链表的头结点pub...原创 2019-06-19 10:13:22 · 745 阅读 · 1 评论 -
剑指offer面试题37(java版):序列化二叉树
welcome to my blog剑指offer面试题37(java版):序列化二叉树题目描述请实现两个函数,分别用来序列化和反序列化二叉树笔记java基础得牢固才行啊…String.valueOf(“15”)Integer.parseInt(“15”)str.split("")思路要对递归有感觉使用了一个全局变量作为字符串数组的索引, 索引值在每次递归中改变序列化...原创 2019-06-19 10:14:44 · 448 阅读 · 0 评论 -
剑指offer面试题38(java版):字符串的排列
welcome to my blog剑指offer面试题38(java版):字符串的排列题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。笔记将char[]转成String不...原创 2019-06-19 10:15:33 · 516 阅读 · 0 评论 -
剑指offer面试题39(java版):数组中出现次数超过一半的数字
welcome to my blog剑指offer面试题39(java版):数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路1出发点:数组中出现次数超过数组长度一半的元素, 出现的次数比...原创 2019-06-19 10:16:10 · 415 阅读 · 2 评论 -
剑指offer面试题40(java版):最小的K个数
welcome to my blog剑指offer面试题40(java版):最小的K个数题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4笔记务必掌握快速排序的partition基于partition的方法, 会改变输入的数组import java.util.ArrayList;public class...原创 2019-06-19 10:16:46 · 917 阅读 · 0 评论 -
剑指offer面试题41(java版):数据流中的中位数
welcome to my blog剑指offer面试题41(java版):数据流中的中位数题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路使...原创 2019-06-19 10:17:22 · 469 阅读 · 0 评论 -
剑指offer面试题42(java版):连续子数组的最大和
welcome to my blog剑指offer面试题42(java版):连续子数组的最大和题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,...原创 2019-06-19 10:17:58 · 687 阅读 · 0 评论