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

浙公网安备 33010602011771号