
剑指offer
Gordon_run
一粒沙里见世界,一朵花里见天国,手掌里盛住无限,一刹那便是永
展开
-
[剑指offer]----- 61 把二叉树打印成多行
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。代码思路: 就是二叉树的层序遍历,用队列来实现。我们需要两个变量,一个start记录当前层已经打印的节点个数...原创 2019-05-08 20:24:42 · 271 阅读 · 0 评论 -
[剑指offer]------62 序列化二叉树
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。代码思路: 就是二叉树的层序遍历,用队列来实现。我们需要两个变量,一个start记录当前层已经打印的节点个数,一个end...原创 2019-05-08 20:27:52 · 240 阅读 · 0 评论 -
[剑指offer]--- 49 把字符串转换成整数
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。...原创 2019-04-28 11:46:10 · 222 阅读 · 0 评论 -
[剑指offer]---46 求1+2+3+…+n
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路;累加不能用循环的话,那就试试递归吧。判断递归的终止条件不能...原创 2019-04-28 11:00:14 · 209 阅读 · 0 评论 -
[剑指offer]-- 11 数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。代码提示:指数为负时,可以先对指数求绝对值,算出次方的结果后再取倒数 当底数为0,指数为负时,会出现对0求倒数情况,要特殊处理 0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的 在计算次方的时候,除了简单的遍历,我们可以使用递归的思想,如下...原创 2019-03-30 21:55:07 · 119 阅读 · 0 评论 -
[剑指offer]-- 10 二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路: 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最...原创 2019-03-29 13:43:09 · 162 阅读 · 0 评论 -
[剑指offer]-- 09 斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39代码思路:公式:f(n) = n, n <= 1f(n) = f(n-1) + f(n-2), n > 1可以直接使用递归的方法:if(n<=1) return n;else return Fibonacci(n-1...原创 2019-03-29 13:38:57 · 135 阅读 · 0 评论 -
[剑指offer]-- 08 旋转数组的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。代码思路:采用二分查找法。需要考虑三种情况:array[mid] >...原创 2019-03-29 13:35:24 · 121 阅读 · 0 评论 -
[剑指offer]-- 06 重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码思路: 我们知道,前序遍历的第一个节点就是树的根节点,所以我们先根据前序遍历序列的第一个数字创建根结点,...原创 2019-03-29 13:32:09 · 102 阅读 · 0 评论 -
[剑指offer]-- 07 用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:两个栈 stack1 和 stack2:push 动作都在 stack1 中进行, pop 动作在 stack2 中进行。当 stack2 不为空时,直接 pop,当 stack2 为空时,先把 stack1 中的元素 pop 出来,push 到 stack2 中,再从...原创 2019-03-29 11:18:30 · 113 阅读 · 0 评论 -
[剑指offer]-- 06 重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路: 我们知道,前序遍历的第一个节点就是树的根节点,所以我们先根据前序遍历序列的第一个数字创建根结点,接下来在中序...原创 2019-03-29 11:15:36 · 151 阅读 · 0 评论 -
[剑指offer]-- 05 从尾到头打印链表
题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路:一种方法是利用栈来实现;另外一种方法是利用三个指针把链表反转,关键是 r 指针保存断开的节点。解题代码:1,循环遍历,反转链表/*** public class ListNode {* int val;* ListNode next =...原创 2019-03-29 11:08:26 · 243 阅读 · 0 评论 -
剑指offer -- 04 替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:很简单,从后往前遍历就对了。解题代码:public class Solution { public String replaceSpace(StringBuffer str)...原创 2019-03-29 11:01:44 · 117 阅读 · 0 评论 -
使用与运算符代替求余运算符的技巧
1.性能对比:求余运算: a % b就相当与a-(a / b)*b 的运算。与运算: 就是一个指令的事2.在特殊场景下,是否能用与&替代%呢?在对10进行求余的时候,我们发现,余数总是整数中的个位上的数字,而不用管其他位是什么;在与运算中,我们经常需要使用位操作符&来取某些位上的值,例如使用0xff&0x17ae来获取低8位的值,现在我们已经发现有点关联...转载 2019-03-29 09:47:24 · 927 阅读 · 0 评论 -
能否用通俗的语言解释『多项式时间』?
什么是多项式时间,我在阅读以及学习中,也是经常碰到这个名词,终于在知乎找到了一个比较明白的说法了。参考文章:https://www.zhihu.com/question/24653072...原创 2019-03-29 09:44:39 · 6633 阅读 · 1 评论 -
[剑指offer]------63 二叉搜索树的第k个结点
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。代码思路: 因为二叉搜索树按照中序遍历的顺序打...原创 2019-05-08 20:30:01 · 192 阅读 · 0 评论 -
[剑指offer]------64 数据流中的中位数
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert...原创 2019-05-08 20:32:16 · 212 阅读 · 0 评论 -
[剑指offer]--- 60 按之字形顺序打印二叉树
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。代码思路:设两个栈,s2存放奇数层,s1...原创 2019-05-06 20:14:31 · 310 阅读 · 0 评论 -
[剑指offer]--- 59 对称的二叉树
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。代码思路:法一:递归。根节点的左右子树相同,左子树的左子树和右子树的右子树相同,左子树的右子...原创 2019-05-06 20:12:04 · 194 阅读 · 0 评论 -
[剑指offer]--- 58 二叉树的下一个结点
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。代码思路:中序遍历:左 -> 根 -> 右...原创 2019-05-06 20:08:58 · 173 阅读 · 0 评论 -
[剑指offer]--- 57 删除链表中重复的结点
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->...原创 2019-05-06 20:04:46 · 217 阅读 · 0 评论 -
[剑指offer]--- 56 链表中环的入口结点
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。代码思路: 一种方法是用 hashmap来存储和查找节点; 另一种方法是双指针法。...原创 2019-05-06 19:57:34 · 243 阅读 · 0 评论 -
[剑指offer]--- 54 表示数值的字符串
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目 : 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100″,”5e2″,”-123″,”3.1416″和”-1E-16″都表示数值。 但是”12e”,”1a3.14″,”...原创 2019-05-06 19:54:39 · 318 阅读 · 0 评论 -
[剑指offer]--- 55 表示数值的字符串
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字...原创 2019-05-06 19:50:30 · 293 阅读 · 0 评论 -
[剑指offer]--- 53 正则表达式匹配
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字...原创 2019-05-06 19:47:51 · 175 阅读 · 0 评论 -
[剑指offer] --------- 52 构建乘积数组
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。...原创 2019-05-06 19:41:00 · 166 阅读 · 0 评论 -
[剑指offer]----- 51 数组中重复的数字
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3...原创 2019-05-06 19:35:59 · 237 阅读 · 0 评论 -
剑指offer-----------------------参考推荐
剑指offer终于第二遍刷完了!在这里我要特别的感谢一个博客。-----------------------(づ ̄3 ̄)づ╭❤~------------------------------一首<<The Phoenix>>送给大家,大家学习路上加油!ヾ(◍°∇°◍)ノ゙(传送门:https://music.163.com/#/song?...原创 2019-05-08 20:49:59 · 1648 阅读 · 1 评论 -
[剑指offer]------67 机器人的运动范围
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35...原创 2019-05-08 20:39:39 · 195 阅读 · 0 评论 -
[剑指offer]------66 矩阵中的路径
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,...原创 2019-05-08 20:37:11 · 437 阅读 · 0 评论 -
[剑指offer]------65 滑动窗口的最大值
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}...原创 2019-05-08 20:35:07 · 192 阅读 · 0 评论 -
[剑指offer]---45 孩子们的游戏(圆圈中最后剩下的数)
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编...原创 2019-04-06 16:04:44 · 230 阅读 · 0 评论 -
[剑指offer]---44 扑克牌顺子
温馨 小提示:如果代码看不懂,不妨拿出纸和笔,找几个例子,多走几遍程序, 再搜索一下相关的博客,慢慢的就加深理解了。题目: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿...原创 2019-04-06 16:02:46 · 270 阅读 · 0 评论 -
[剑指offer]-- 27 二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。代码思路:题目可能比较难理解,可以看如下的图,我们有一棵二叉搜索树,要求得右边的双向链表。在二叉搜索树中,左子结点的值总是小于父结点的值,右子节点的值总是大于父结点的值。因此我们在转换成排序双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的...原创 2019-04-05 20:50:42 · 583 阅读 · 0 评论 -
剑指offer -- 03 二维数组中的查找
题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数解题思路:二维数组是有序的,从右上角来看,向左数字递减,向下数字递增。因此从右上角开始查找,当要查找数字比右上角数字大时,下移; 当要查找数字比右上角数...原创 2019-03-27 16:57:50 · 196 阅读 · 0 评论 -
[剑指offer]-- 26 复杂链表的复制
题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空):代码思路:解题代码:/*public class RandomListNode { int label; ...原创 2019-03-31 13:11:08 · 172 阅读 · 0 评论 -
[剑指offer]-- 25 二叉树中和为某一值的路径
题目: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。代码思路: 用前序遍历的方式访问到某一结点时,把该结点添加到路径上,并用目标值减去该节点的值。如果该结点为叶结点并且目标值减去该节点的值刚好为0,则当前的路径符合要求,我们把加入res数组中。如果当前结点不是叶...原创 2019-03-31 12:32:49 · 152 阅读 · 0 评论 -
[剑指offer]-- 24 二叉搜索树的后序遍历序列
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。代码思路: 二叉搜索树: 左子树<根<=右子树 对于后序遍历来说,序列数组的最后一个元素一定是根节点, 根据这个元素,将前面的数组分为左、右两个部分,左侧部分都比该元素...原创 2019-03-31 12:28:11 · 130 阅读 · 0 评论 -
[剑指offer]-- 23 从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。代码思路:就是二叉树的层序遍历。借助一个队列就可以实现。使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来。注意Queue创建的方式:Queue<TreeNode> queue = new LinkedL...原创 2019-03-31 12:23:59 · 124 阅读 · 0 评论 -
[剑指offer]-- 22 栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)代码思路: 模拟堆栈操作的过程,将原数列依次压栈...原创 2019-03-30 22:50:50 · 133 阅读 · 0 评论