
剑指offer算法
即刻实现工作室
Above all, don't lose hope.
展开
-
剑指offer算法-----数组遍历
积沙成塔题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析与实现:在二位数组中查找一个数,我们可以一次遍历进行与目标数据比较得出,但这种方法的复杂度很大(n平方)。由于每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增...原创 2018-08-18 16:17:36 · 275 阅读 · 0 评论 -
剑指offer算法------从尾到头遍历链表
积沙成塔题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。分析与实现:要想从尾到头遍历链表,首先需要做的是倒转链表,再进行遍历。倒转链表的思路:链表的倒转其实值得是前一个的next域指向后边一个节点的引用。为了减小算法的复杂度,我们先创建三个临时节点。q是指向前一个节点的引用,h是指向后一个节点的引用,tempNode用于临时存储可能被覆盖的引用值。...原创 2018-08-18 17:08:31 · 3218 阅读 · 0 评论 -
剑指offer算法-----矩形覆盖
算法描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析与实现:由于是2*n的大矩形,同时这个矩形的长度不变,只有宽度n一直在变。经过分析会发现覆盖的方法其实和占满宽度n的方式一样。所以这个问题就变成了类似如下问题:有一根长为n的绳子,每次切割长度是1或者2,问有多少种切割方法?(这其实和青蛙跳台阶是...原创 2018-08-26 09:34:44 · 270 阅读 · 0 评论 -
剑指offer算法-----根据前序遍历和中序遍历重新生成二叉树
积沙成塔题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。算法分析:在根据前序遍历和中序遍历生成二叉树的情景中,首先通过前序遍历得到根,再根据中序遍历得到左右子树的元素,再按照同样的思路继续生...原创 2018-08-20 10:08:24 · 457 阅读 · 0 评论 -
剑指offer算法------两个栈生成队列
积沙成塔题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。算法实现:public class UseStackCreatQuee { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stac...原创 2018-08-20 10:20:46 · 263 阅读 · 0 评论 -
剑指offer算法-----斐波那契数列
积沙成塔题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39算法实现:public class Fibonc { /*这种实现方法是递归的思想,这种设计方法存在效率问题,会重复计算某些值,一种优化的方式可以考虑 * 存储已经计算过的数据 * */ public int Fibo...原创 2018-08-20 10:24:46 · 203 阅读 · 0 评论 -
剑指offer算法-----青蛙跳台阶
积沙成塔题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。算法分析与实现:由于每次只能跳一阶或者两阶,所以存在两种情况,当在最后一跳跳了两阶的话,则条n节和跳n-2阶的跳法相同,如果最后一跳跳一阶则跳n节和跳n-1阶的跳法相同。所以根据分类加法的原则的f(n)=f(n-1)+f(n-2)public c...原创 2018-08-20 10:30:09 · 390 阅读 · 0 评论