剑指offer
xhh随便写写
这个作者很懒,什么都没留下…
展开
-
二维数组中查找,替换空格,倒序输出链表
1.题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数解题思路因为二维数组是左到右递增的顺序排序的,那么咱可以从数组的最右上角开始进行对比,比右上角的值大的向下查找,如果小的话进行左移,如果越界,则说明二维数组中不存在该整数。public cl...原创 2019-08-03 22:20:42 · 164 阅读 · 0 评论 -
序列化二叉树,字符串的排列,数组中出现次数超过一半的数字(众数)
题目描述请实现两个函数,分别用来序列化和反序列化二叉树解题思路对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个’,’作为分割; 对于空节点则以 ‘$,’ 代替。对于反序列化:将字符串按照“,”进行分割,插入到队列中,然后依次从队列中取出字符建立节点,递归创建一个二叉树。/** * 序列化二叉树 * * @...原创 2019-08-17 18:20:08 · 127 阅读 · 0 评论 -
包含min函数的栈,栈的压入、弹出序列
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;public class Thirty { Stack<Integer> stack=new Stack<>(); Stack<Integer> tmp=new Stack<>(); int min=Integer...原创 2019-08-12 23:09:59 · 96 阅读 · 0 评论 -
剪绳子,打印从 1 到最大的 n 位数,链表中倒数第 K 个结点,找到链表环的入口
题目描述把一根绳子剪成多段,并且使得每段的长度乘积最大。解题思路贪心尽可能多剪长度为 3 的绳子,并且不允许有长度为 1 的绳子出现。如果出现了,就从已经切好长度为 3 的绳子中拿出一段与长度为 1 的绳子重新组合,把它们切成两段长度为 2 的绳子。证明:当 n >= 5 时,3(n - 3) - n = 2n - 9 > 0,且 2(n - 2) - n = n - 4 ...原创 2019-08-16 16:05:40 · 74 阅读 · 0 评论 -
回溯法:打印矩阵的路径,机器人运动的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符...原创 2019-08-16 10:46:19 · 229 阅读 · 0 评论 -
两个链表的第一个公共结点,数字在排序数组中出现的次数
题目描述解题思路设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点...原创 2019-08-20 10:40:39 · 164 阅读 · 0 评论 -
从上往下打印二叉树,判断该数组是不是某二叉搜索树的后序,前序,或者是中序遍历的结果,二叉树中和为某一值的路径
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路就是二叉树的层序遍历。借助一个队列就可以实现。使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来。 public void print(TreeNode node) { LinkedList<TreeNode>...原创 2019-08-14 21:04:09 · 132 阅读 · 0 评论 -
把数组排成最小的数,把数字翻译成字符串
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。解题思路先将数组转换成字符串数组,然后对字符串数组按照规则排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则:若ab > ba 则 a > b若ab < ba 则 a &...原创 2019-08-19 19:33:40 · 134 阅读 · 0 评论 -
数据流中的中位数,字符流中第一个不重复的字符,连续子数组的最大和
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路我们可以将数据排序后分为两部分,左边部分的数据总是比右边的数据小。那么,我们就可以用最大堆和最小...原创 2019-08-18 18:07:19 · 164 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面,两个递增链表的合并,树的子结构
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。第一种/** * 第一种是使用动态数组vector实现的 */`` /** * 第一种是使用动态数组vector实现的 */ public void reorderArray(int[] arra...原创 2019-08-06 22:29:36 · 160 阅读 · 0 评论 -
树的镜像,顺序打印二维数组
二叉树的镜像题目描述源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5/** * 树的镜像 * @author 80769 * */public class TwentySeven { public void mirrot(TreeNode root) { if(root==nul...原创 2019-08-08 17:38:29 · 228 阅读 · 0 评论 -
二进制中1的个数,给定一个double类型的浮点数base和int类型的整数exponent
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变...原创 2019-08-05 21:06:00 · 206 阅读 · 0 评论 -
旋转数组的最小数字,实现斐波那契数列(递归和递推两种方法),跳台阶,加强版跳台阶
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路采用二分查找法。需要考虑三种情况:array[mid] > array[high]:出现这...原创 2019-08-04 19:50:24 · 143 阅读 · 0 评论 -
二叉树重健
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路在二叉树的前序遍历中,第一个数字总是数的根结点的值,但在中序遍历中,根节点的值在序列的中间,左子树的节点的值位于根节点的转变,有右子树的值在根...原创 2019-08-03 23:34:42 · 103 阅读 · 0 评论 -
扑克牌顺子,圆圈中最后剩下的数, 股票的最大利润,求 1+2+3+...+n
题目描述五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。解题思路先对数组进行排序,然后找到癞子的数量,然后如果又相同的除了零之外的返回false,然后癞子来补齐扑克牌,看是否是顺子package com.xhh.offer;import java.util.Arrays;/** * 扑克牌顺子 * * @author xhh * */public c...原创 2019-08-26 15:50:48 · 181 阅读 · 0 评论