![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《剑指offer》
mydaima
这个作者很懒,什么都没留下…
展开
-
剑指offer-test66
66.机器人的运动范围地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?典型的DFS (深度优先搜索)...原创 2019-06-23 22:35:23 · 134 阅读 · 0 评论 -
剑指offer-test60
60.从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:按层次输出二叉树访问根节点,并将根节点入队。当队列不空的时候,重复以下操作。1、弹出一个元素。作为当前的根节点。2、如果根节点有左孩子,访问左孩子,并将左孩子入队。3、如果根节点有右孩子,访问右孩子,并将右孩子入队。import java.util.ArrayList;import java.util.L...原创 2019-06-08 18:37:16 · 133 阅读 · 0 评论 -
剑指offer-test40
40.数组中只出现一次的数字。一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:用集合来进行判断,如果在这个集合里面不包含这个元素,则就将这个元素加入到集合中。若集合已经存在这个元素,说明这个元素不仅出现了一次了,那么就删掉已经加入进的该元素。那么集合剩下的只有出现一次的元素。import java.util.List;import jav...原创 2019-05-29 20:36:50 · 80 阅读 · 0 评论 -
剑指offer-test39
39.平衡二叉树输入一棵二叉树,判断该二叉树是否是平衡二叉树。如果二叉树的每个节点的左子树和右子树的深度不大于1,它就是平衡二叉树。二叉树高度和深度的理解:高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数。我们先来看看高度和深度的定义,某节点的深度是指从根节点到该节点的最长简单路径边的条数,而高度是指从该节点到叶子节点的最长简单路径边的条数。—如果二叉树有n个结点,二叉树...原创 2019-05-29 20:23:28 · 64 阅读 · 0 评论 -
剑指offer-test59
59.按之字形顺序打印二叉树请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。60.是把二叉树打印成多行从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。22.是从上往下打印二叉树从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:二叉树的层次遍历1.创建两个队列:一个...原创 2019-06-06 22:05:07 · 251 阅读 · 0 评论 -
剑指offer-test58
58.对称的二叉树请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*思路:采用递归:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同----(左的左、右的右)左子树的右子树和右子树的左子树相同.----(左的右、右的左)public class Solution { boolean isSymmetri...原创 2019-06-06 21:56:00 · 261 阅读 · 0 评论 -
剑指offer-test46
46.孩子们的游戏(圆圈中最后剩下的数)题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继...原创 2019-06-01 19:00:25 · 167 阅读 · 0 评论 -
剑指offer-test45
45.扑克牌顺子题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-06-01 19:00:01 · 132 阅读 · 0 评论 -
剑指offer-test44
44.翻转单次顺序列题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?算...原创 2019-06-01 18:59:17 · 118 阅读 · 0 评论 -
剑指offer-test43
43.左旋转字符串汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!循环左移和循环右移都是利用三次反转思想:一下是数学推导过程:利用字符串翻转。假设字符串...原创 2019-06-01 18:58:57 · 143 阅读 · 0 评论 -
剑指offer-test42
42.和为S的两个数字题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路:因为是递增有序数组,则可以使用左右夹逼方式。递增有序,那么头和尾越远乘积越小。import java.util.ArrayList;public class Solution { public ArrayList&...原创 2019-06-01 18:58:40 · 130 阅读 · 0 评论 -
剑指offer-test57
57.二叉树的下一个结点给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。前序遍历结果:ABDEHICFG(根左右)第一个肯定是根节点中序遍历结果:DBHEIAFCG(左根右)后序遍历结果:DHIEBFGCA(左右根)最后一个肯定是根节点分析:(1) 若该节点存在右子树:则下一个节点为右子树最左子节点...原创 2019-06-06 21:21:44 · 162 阅读 · 0 评论 -
剑指offer-test56
56.删除链表中重复的节点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5由于链表是排序好的,所以相同值的节点肯定在相邻的位置。方式一:使用递归的方式:public class Solution { public...原创 2019-06-06 19:46:03 · 75 阅读 · 0 评论 -
剑指offer-test38
38.二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法1:递归求解:假如是空节点,则返回0;否则,原树的深度由左右子树中深度较的深度加1,为原树的深度。public class Solution { public int TreeDepth(TreeNode proot) { ...原创 2019-05-29 10:34:06 · 62 阅读 · 0 评论 -
剑指offer-test37
37.数字在排序数组中出现的次数。(这是一个排序数组可以使用二分查找方法)import java.util.Arrays;public class Solution { public int GetNumberOfK(int [] array , int k) { Arrays.sort(array);//排序数组 int res=0; ...原创 2019-05-28 22:31:19 · 113 阅读 · 0 评论 -
剑指offer-test36
36.两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点方法1:开始遍历两遍链表获取两个表的长度,比较长度让长的一个先走差值个步长,再两个一起走。(快慢指针思想,也是链表问题的一般性思路)public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2)...原创 2019-05-28 21:57:45 · 59 阅读 · 0 评论 -
剑指offer-test61
61.序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树。思路:所谓序列化指的是遍历二叉树为字符串;所谓反序列化指的是依据字符串重新构造成二叉树。1.对于序列化: 依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉树时碰到Null指针(空节点)时,这些Null指针被序列化为一个特殊的字符“#”。 另外,结点之间的数值用逗号隔开。2. 对于反序列化...原创 2019-06-09 20:10:56 · 74 阅读 · 0 评论 -
剑指offer-test62
62.二叉搜索树的第k个结点给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序。所以,按照中序遍历顺序找到第k个结点就是结果。public class Solution { int index=0;//计数器 TreeNode KthNo...原创 2019-06-09 21:36:32 · 108 阅读 · 0 评论 -
剑指offer-test47
47原创 2019-06-03 20:25:42 · 177 阅读 · 0 评论 -
剑指offer-test06
6.旋转数组的最小数字1、最笨的一种:遍历整个数组,找出其中最小的数。这样肯定拿不到offer2、稍微优化: public int minNumberInRotateArray(int[] array) { if (array.length == 0) return 0; for (int i = 0; i < array....原创 2019-06-26 22:13:46 · 57 阅读 · 0 评论 -
剑指offer-test65
65.矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径...原创 2019-06-23 21:27:49 · 109 阅读 · 0 评论 -
剑指offer-test64
64.滑动窗口的最大值给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2...原创 2019-06-23 21:27:25 · 102 阅读 · 0 评论 -
剑指offer-test63
63.数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。...原创 2019-06-23 21:24:55 · 91 阅读 · 0 评论 -
剑指offer-test53
53.表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。思路:分四种情况讨论:第一种:对于e的情况1.e不能出现在最后面,因为e后面要接数字2.不能同时存在两个e第二种:对于符...原创 2019-06-04 22:03:15 · 255 阅读 · 0 评论 -
剑指offer-test52
52.正则表达式匹配请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"aba"均不匹配思路:(吃字符,问题是:吃还是不吃,吃,吃几个?)**当模式中的第二个字符不是时:**...原创 2019-06-04 12:04:39 · 80 阅读 · 0 评论 -
剑指offer-test51
51.构建乘积数组给定一个数组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]。不能使用除法。通过观察B数组会发现,B[i]=A数组所有元素乘积/A[i]。但是题意说明不能使用除法。那么另外考虑:B[i]直观意义是B[i]项等于A数组所有数的乘积,但是去除A[i]项。由于是乘法,所以直接令A[...原创 2019-06-04 10:33:29 · 74 阅读 · 0 评论 -
剑指offer-test50
50.数组中重复的数字在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。方法1:import java.util.*;public class Solution { p...原创 2019-06-03 22:28:49 · 98 阅读 · 0 评论 -
剑指offer-test49
49.把字符串换成整数将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。几种情况的考虑:1.空字符串2.正负号3.非数字字符4.数字超过整数范围(溢出)public class Solution { public i...原创 2019-06-03 22:08:40 · 208 阅读 · 0 评论 -
剑指offer-test48
48.不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:不用十进制加减,可以用二进制加减,也就是位运算。加法包括按位相加以及进位“按位相加”就是位运算里的按位异或^,”进位移位“就是位运算里的按位与和移位& + <<,所以只要到进位的数为0时终止“按位相加”和”进位移位“这两个步骤就行了。两个数异或:相当于每一位...原创 2019-06-03 21:07:07 · 328 阅读 · 0 评论 -
剑指offer-test35
35.数组中的逆序对(涉及归并排序)在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007第一就是暴力求解法,时间复杂度为o(n^2),空间复杂度o(1)第二种思路就是使用归并排序的思想进行处理,时间复杂度o(nlog(n)),空间复杂度0(n)...原创 2019-05-28 21:36:23 · 109 阅读 · 0 评论 -
剑指offer-test55
55.链表中环的入口结点给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。判断一条链表是否存在环方法1:()最差)依次遍历链表,直到遇到和之前遍历的节点一样的节点,则认为有环。方法2:创建一个哈希表用来存放遍历过的节点,然后用每个新的节点和哈希表里的节点进行比较,有相同的节点则说明有环。方法3:算法最优的方法,那就是给首节点附上两个指针,慢指针每次只遍历一个节点,...原创 2019-06-05 17:35:17 · 93 阅读 · 0 评论 -
剑指offer-test14
14.输出链表中倒数第k个节点思路相当于制造一个K长度的尺子用来量长度:把尺子从头往后移动,当尺子的右端与链表的末尾对齐的时候,尺子左端所在的结点就是倒数第k个结点!算法具体如下:指针p和q都先指向开始的节点,p一直向后走,而q等到p走了k步再开始向后走,从这个时刻起p总是领先q的k个位置,当p走到终点时,q走到了倒数第k个节点。public class Solution { pu...原创 2019-05-16 19:08:28 · 56 阅读 · 0 评论 -
剑指offer-test13
13.调整数组顺序使奇数位于偶数前面(这道题考察的是排序,稳定且高效的排序算法常用的是插入排序和归并排序)这里需要保证奇数和奇数,偶数和偶数之间的相对位置不变。说明需要保持稳定性。那么插入排序和归并排序可以利用。以下时间复杂度为O(n^2):1.找到第一个奇数位置2.找到奇数后的第一个偶数位置,将该偶数后移一位,(j–)继续判断前面是否还有偶数。3.因为进行了j–,则将奇数前移到最后一个...原创 2019-05-16 18:54:10 · 49 阅读 · 0 评论 -
剑指offer-test04
4.重建二叉树前序遍历:根结点 —> 左子树 —> 右子树中序遍历:左子树—> 根结点 —> 右子树后序遍历:左子树 —> 右子树 —> 根结点层次遍历:只需按层次遍历即可先序遍历特点:第一个值是根节点中序遍历特点:根节点左边都是左子树,右边都是右子树例如,求下面二叉树的各种遍历前序遍历:1 2 4 5 7 8 3 6中序遍历:...原创 2019-05-11 18:24:06 · 156 阅读 · 0 评论 -
剑指offer-test03
3.从尾到头打印链表(输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。)(这个其实就是类似起遍历作用的,到最后一个的时候方法栈开始返回,因为题目要求从尾到头.)注意:1.ArrayList是实现了基于动态数组的数据结构,非线程安全的,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedLi...原创 2019-05-11 17:49:23 · 76 阅读 · 0 评论 -
剑指offer-test29
29.最小的K个数输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。1.基于堆排序算法,构建最大堆。时间复杂度为O(nlogk)(1) 遍历输入数组,将前k个数插入到推中;(利用multiset来做为堆的实现)(2) 继续从输入数组中读入元素做为待插入整数,并将它与堆中最大值比较:如果待插入的值比当前已有的最大值小,则...原创 2019-05-24 14:44:28 · 90 阅读 · 0 评论 -
剑指offer-test12
12.数值的整数次方主要考查两个基础点:1、分类讨论的思想;2、基本数据类型取值范围。第一种方法:使用递归,时间复杂度O(logn)分为两种情况来讨论,一种是指数exponent>=0的情况,一种是exponent<0的情况,后者只需要简单的处理下,让其变为倒数就可以当n为偶数,a^n =(an/2)*(an/2)当n为奇数,a^n = a1 * a2 * a举例:...原创 2019-05-15 18:34:13 · 63 阅读 · 0 评论 -
剑指offer-test11
11.二进制1的个数原创 2019-05-15 17:32:39 · 86 阅读 · 0 评论 -
剑指offer-test10
10.矩形覆盖–核心也是斐波那契数列用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?考虑这以下几种情形:public class Solution { public int RectCover(int n) { int fn1=1; int fn2=2; int fn=0; if(n<1) re...原创 2019-05-15 17:25:33 · 182 阅读 · 0 评论 -
剑指offer-test09
9.变态跳台阶。—想成如何从成都到上海。一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。令f(n)表示从任意位置向上跳n个台阶的跳法个数:将第一步作为固定:第一步跳的时候选择有n种方式:跳1阶,那么剩下n-1阶,有f(n-1)种跳法跳2阶,那么剩下n-2阶,有f(n-2)种跳法跳3阶,那么剩下n-1阶,有f(n-3)种跳法...原创 2019-05-15 16:57:35 · 73 阅读 · 0 评论