
Algorithm
凉秋cds
这个作者很懒,什么都没留下…
展开
-
Path Sum
Path Sum/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solut原创 2016-03-15 22:25:31 · 233 阅读 · 0 评论 -
二叉树系列6:非递归遍历
1 非递归中序遍历 /** * 非递归中序遍历二叉树 */ public ArrayList<TreeNode> inorderTraversal(TreeNode t) { if (t == null) { return null; } Stack<TreeNode> stack = new S原创 2016-03-26 03:36:13 · 371 阅读 · 0 评论 -
二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
【要求】输入一个序列,判断这个序列是不是某个二叉搜索树的后续遍历结果。要判断,首先得分析起床二叉搜索树的后续遍历的特性。由于后续遍历是“左-右-根”,所以:访问的最后一个节点实际上就是整棵二叉树的根节点root;然后,找到大于根节点的最小节点 rightMin,在进行后续遍历的时候,rightMin 是右子树的第一个被访问的节点,所以 rightMin 前面的就是 root 的左子树,原创 2016-03-26 03:13:52 · 413 阅读 · 0 评论 -
链表常用技巧:快行指针
快行指针,处理链表相关的问题的技巧原创 2016-03-26 15:46:58 · 853 阅读 · 0 评论 -
设计一个栈,支持O(1)的min方法
首先,对于栈,实现其min方法很简单,就是每次push一个值的时候,对minValue进行维护:if(value < minVlaue){ minValue = value;}每次调用min() 时直接返回minValue即可。但是,如果pop走的是minValue则需要遍历剩下的元素求最小值。所以这样无法满足O(1)的要求,我们需要额外的空间保存栈的每一个状态下的最小值。正如上面陈述的,原创 2016-04-20 00:29:55 · 1728 阅读 · 0 评论 -
用栈模拟堆盘子
题目:设想有一堆盘子,堆得太高可能会倒下来,因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在一个栈堆满时新建一个栈。此外,push和pop要和只有一个栈的情况一致。另外需要实现一个popAt(index)方法,根据指定的子栈,执行pop操作,pop之后还要维持栈结构。代码package原创 2016-04-20 02:18:25 · 698 阅读 · 0 评论 -
汉诺塔问题
(经典问题之所以经典,是因为我们可以通过它学会解决一系列问题的思路,而不是仅仅只记住一个标准答案。)汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。分析过程:数学归原创 2016-04-20 13:08:39 · 436 阅读 · 0 评论 -
用一个额外的栈对栈进行升序排序
题目按升序对栈进行排序,最多只能使用一个额外的栈存放临时数据,但不得将元素复制到另外的数据结构中(如数组)。该栈只支持如下操作:push、pop、peek和isEmpty。代码package test1;import java.util.Random;import java.util.Stack;public class MyStack { public Stack<Integer> st原创 2016-04-20 13:53:49 · 1061 阅读 · 0 评论 -
二叉树系列2:判断二叉树是否平衡
要求:判断一颗二叉树是否平衡。平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。1 一般递归TreeNode.javapackage BinaryTree;public class TreeNode { int val; TreeNo原创 2016-03-25 00:43:52 · 546 阅读 · 0 评论 -
二叉树系列1: 层次遍历二叉树
要求:从根节点开始,从上到下,从左到右逐层打印二叉树的节点。TreeNode.javapackage BinaryTree;public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(TreeNode l, TreeNode r, int v) { lef原创 2016-03-25 00:05:12 · 451 阅读 · 0 评论 -
检查一颗二叉树是否是二叉查找树
中序遍历法首先,最直观的一种算法就是进行一次中序遍历,然后将每个节点的值保存在一个数组中,然后这个数组是有序的,那么这颗树就是一个二叉查找树。小问题但是这个算法有一个问题,那就是对于存在重复值的二叉查找树,它并不能判断其正确性,比如:20.left = 20;20.right = 20;两者在数组中看起来是一样的。但是一个允许重复值存在的二叉查找树要约定好,插入一个重复的值,它应该在左边还是右边。原创 2016-04-20 20:19:37 · 1240 阅读 · 0 评论 -
二叉树系列5:建立二叉搜索树
建立搜索二叉树原创 2016-03-26 01:40:49 · 820 阅读 · 0 评论 -
二叉树系列3: 二叉树的路径问题
1 输出根节点到叶节点的路径TreeNode.javapackage BinaryTree;public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(TreeNode l, TreeNode r, int v) { left =原创 2016-03-25 13:24:54 · 490 阅读 · 0 评论 -
二叉树系列4:lowest common ancestor
【要求】:找出二叉树上任意两个节点的最近共同父结点。这道题的简化版本就是将“二叉树”换成“搜索二叉树”,那么可以通过节点的值的比较利用递归来判断。这里,由于是指任意二叉树,任意节点,所以,只能通过搜索来查找。LCA问题的解法非常多,这里介绍的只是一部分。1 通过各自的路径求解由于题目是求得两个节点的最低的公共祖先,所以可以先求得从根到两个目标节点的路径,然后比较路径求解。我这里直接贴源代码,如果想了原创 2016-03-25 02:11:18 · 402 阅读 · 0 评论 -
尾递归
当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。1 线性递归关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递原创 2016-03-16 18:45:31 · 454 阅读 · 0 评论 -
二叉查找树
使二叉树成为尔叉查找树的性质是: 对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有的项的值大于X中的项。由于树的递归定义,通常是递归地编写有关树的操作例程。因为二叉查找树的平均深度是O(log N),所以一般不必担心栈空间被用尽。原创 2016-03-16 17:52:53 · 374 阅读 · 0 评论 -
平衡二叉树之AVL
在计算机科学中,AVL树是最先发明的自平衡二叉查找树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文《An algorithm for the organization of information》中发表了它。平衡因子:节点x的平衡因子是x的左子树的高度减去x的右子树的高度。一颗AVL树的所有节点的平衡因子都是 0 或者 +原创 2016-03-17 16:57:31 · 364 阅读 · 0 评论 -
B树
觉得这一节写的非常好,感觉给自己打开了一个以前完全没有注意到的面,所以贴图保存。原创 2016-03-18 10:46:10 · 314 阅读 · 0 评论 -
二叉树的层次遍历
1 利用递归第一种方法,就是利用递归的方法,按层进行打印,我们把根节点当做第0层,之后层次依次增加,如果我们想打印第二层怎么办呢,利用递归的代码如下: //打印指定level的节点的val public int print_at_level(TreeNode root, int level, ArrayList<Integer> aList) { if(root ==原创 2016-03-14 20:21:13 · 465 阅读 · 0 评论 -
Remove Duplicates from Sorted Array
1 shift每次发现有前后两个数是一样的就将后面的数全部往前shift一位,然后len 减一。public class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; for (int i = 1; i < len; i++) {原创 2016-03-15 12:09:58 · 300 阅读 · 0 评论 -
Plus One
public class Solution { public int[] plusOne(int[] digits) { int len = digits.length; if (len == 0) { return digits; } //末尾小于9的情况 if (++di原创 2016-03-15 12:45:14 · 347 阅读 · 0 评论 -
LeetCode: Pascal's Triangle
public class Solution { public List<List<Integer>> generate(int numRows) { ArrayList<Integer> levelList = new ArrayList<Integer>(); ArrayList<List<Integer>> treeList = new ArrayList原创 2016-03-15 13:08:59 · 361 阅读 · 0 评论 -
LeetCode: Factorial Trailing Zeroes
1 题目2 寻找阶乘的特点定义: 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。亦即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。二十以内数: 以下列出 0 至 20 的阶乘: 0!=1,(0 的阶乘是存在的,且定为1) 1!=1, 2!=2, 3!=6, 4!=24, 5!=120, 6!=原创 2016-03-15 14:05:24 · 504 阅读 · 0 评论 -
Palindrome Number
1 题目2 回文数“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。3 代码publi原创 2016-03-15 14:28:09 · 428 阅读 · 0 评论 -
java实现十进制小数转换二进制
整数和小数分别转换. 整数除以2,商继续除以2,得到0为止,将余数逆序排列.22 / 2 11 余 011 / 2 5 余 15 / 2 2 余 12 / 2 1 余 01 / 2 0 余 1所以22的二进制是10110 小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列.0.8125x原创 2016-04-21 18:10:34 · 10761 阅读 · 1 评论