随笔分类 -  剑指Offer

摘要:题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路 就是二叉树的层序遍历。借助一个队列就可以实现。使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来。注意Queue创建的方式:Qu 阅读全文
posted @ 2019-03-27 09:40 飞晨信息 阅读(155) 评论(0) 推荐(0)
摘要:题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长 阅读全文
posted @ 2019-03-26 13:38 飞晨信息 阅读(354) 评论(0) 推荐(0)
摘要:题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 思路 代码 import java.util.Stack; public class Solution { private Stack stack = new Stack(); priv 阅读全文
posted @ 2019-03-21 09:31 飞晨信息 阅读(156) 评论(0) 推荐(0)
摘要:题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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. 解题思路 先得到矩 阅读全文
posted @ 2019-03-20 11:17 飞晨信息 阅读(362) 评论(0) 推荐(0)
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述 思路 代码 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) 阅读全文
posted @ 2019-03-19 10:50 飞晨信息 阅读(126) 评论(0) 推荐(0)
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路 代码 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public 阅读全文
posted @ 2019-03-18 13:23 飞晨信息 阅读(203) 评论(0) 推荐(0)
摘要:题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路 两种解法:递归和非递归 参考代码 同时有一个和这个题类似的题 题目:合并K个排序链表 题目描述 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 阅读全文
posted @ 2019-03-15 10:11 飞晨信息 阅读(313) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路 本题的关键就是在于对next域的赋值,同时对下一个节点进行保存,然后对把下一个节点赋给新的节点,这样依次循环完所有的节点。每次使新插入的节点变成头第一个有效节点。 阅读全文
posted @ 2019-03-14 17:04 飞晨信息 阅读(188) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路 阅读全文
posted @ 2019-03-14 15:39 飞晨信息 阅读(194) 评论(0) 推荐(0)
摘要:思路 代码 如果不能开僻额外的空间,可以尝试有类似于冒泡排序的方法,如果当前的值为偶数,后一个值为奇数,则两个数对换位置: 阅读全文
posted @ 2019-03-14 13:24 飞晨信息 阅读(338) 评论(0) 推荐(0)
摘要:题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 这道题看似简单,其实BUG重重。要注意的问题: 1 关于次幂的问题特殊的情况,比如次幂为负数,或者基数为0时等等复杂的情况 2 机器中浮点数的比较是有误差的,因此double类型 阅读全文
posted @ 2019-03-14 12:53 飞晨信息 阅读(453) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 阅读全文
posted @ 2019-03-14 11:12 飞晨信息 阅读(208) 评论(0) 推荐(0)
摘要:题目描述 我们可以用2**1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法? 思路 其实,倒数第一列要么就是1个2**1的矩形竖着放,要么就是2个横着放的。如果是竖着放的,那么剩下的就是n-1个小矩形,放法是F(n-1)种;如果是横着放的, 阅读全文
posted @ 2019-03-13 14:33 飞晨信息 阅读(205) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 代码 public class Solution { public int JumpFloorII(int target) { if(target <= 0){ retur 阅读全文
posted @ 2019-03-13 13:41 飞晨信息 阅读(248) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路 代码 public class Solution { public int JumpFloor(int target) { if(target <= 0 ){ re 阅读全文
posted @ 2019-03-13 13:36 飞晨信息 阅读(603) 评论(0) 推荐(0)
摘要:题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路 递归的方法可能会遇到Stack Overflow,所以我们可以考虑用动态规划的方法来实现。采用自底向上方法来保存了先前计算的值,为后面的调用服务。 参考代码 阅读全文
posted @ 2019-03-12 17:00 飞晨信息 阅读(159) 评论(0) 推荐(0)
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路 阅读全文
posted @ 2019-03-12 15:38 飞晨信息 阅读(217) 评论(0) 推荐(0)
摘要:题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路 阅读全文
posted @ 2019-03-12 14:52 飞晨信息 阅读(198) 评论(0) 推荐(0)
摘要:题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路 阅读全文
posted @ 2019-03-12 09:00 飞晨信息 阅读(153) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 思路 阅读全文
posted @ 2019-03-11 15:00 飞晨信息 阅读(155) 评论(0) 推荐(0)