随笔分类 - leetcode
摘要:一,问题描述 有个小孩上楼梯,共有N阶楼梯,小孩一次可以上1阶,2阶或者3阶。走到N阶楼梯,一共有多少种走法? 二,问题分析 DP之自顶向下分析方式: 爬到第N阶楼梯,一共只有三种情况(全划分,加法原理),从第N-1阶爬1阶到第N阶;从第N-2阶爬2阶到第N阶;从第N-3爬3阶到第N阶。 故:way
阅读全文
摘要:一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法。每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内存块中(发生缺页异常)就需要从磁盘把相应的页面调入内存。而若内存已经满了的情况下,需要将内存中暂时不
阅读全文
摘要:一,问题描述 任意给定一棵二叉树,判断它是否是平衡二叉树。所谓平衡二叉树,是指二叉树中任意一个结点的左右子树的高度之差不超过1 二,思路分析 可以分两步实现。第一步先实现求解 二叉树中每个结点的高度的函数height(BinaryNode );然后先序遍历二叉树中的每一个结点node,调用heigh
阅读全文
摘要:一,二叉树的遍历 二叉树的递归遍历非常简洁,递归调用需要用到栈。因此,要想实现非递归遍历,就类似于模拟程序的自动压栈、出栈,就需要创建一个栈。 本程序使用java.util.LinkedList 来表示栈。 二,前序非递归遍历实现 先序遍历是先访问该结点,再访问左子树,然后再访问右子树 因此,先访问
阅读全文
摘要:一,问题描述 假设给定一个有序的整型数组arr,以及一个整数 k,问 k在数组中出现了几次? 二,求解思路 ①数组是有序的,故可考虑用二分查找 ②如果能找到 k 在数组中第一次出现时的索引位置first_index 和 最后一次出现时的索引位置last_index 就可以知道 k 出现的次数了: (
阅读全文
摘要:一,使用单链表实现栈 ①栈需要一个栈顶指针 ②栈的基本操作有出栈和入栈,以及判断栈是否为空 ③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针。因此,在栈内部需要实现一个单链表。代码如下: 二,使用两个栈实现队列 ①栈是先进后出,而队列是先进先出。要实现队列,就需要实现队列的基本操作,
阅读全文
摘要:一,问题描述 给定一个序列,求解它的最长 递增 子序列 的长度。比如: arr[] = {3,1,4,1,5,9,2,6,5} 的最长递增子序列长度为4。即为:1,4,5,9 二,算法分析 有两种方式来求解,一种是转化为LCS问题。即,首先对数组排序,将排序后的结果存储在辅助数组中。排序时间复杂度O
阅读全文
摘要:一,问题描述 给定一个数组,求解该数组中有多少组逆序对。比如 [7,5,6,4]一共有五对逆序对。分别是:(7,6),(7,5),(7,4),(6,4),(5,4) 二,算法分析 有两种方法来求解逆序对 的数目。一种是,对数组中的每个元素,都与它后面的元素进行比较,若后面的元素比它小,则找到一个逆序
阅读全文
摘要:一,问题描述 给定若干个字符,求解 这些字符能够表示的最多组合个数。比如{'a','b','c'} 一共有七种组合。(每种组合没有重复的字符 且 组合的种数与顺序无关,如 ab 和 ba 是同一种组合) a、b 、c 、ab 、ac 、bc 、abc 其实,求组合个数,可以用公式来求解:具给定 n种
阅读全文
摘要:一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB 则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA 二,算法求解 这是一个动态规划的题目。对于可用动态规划求解的问题
阅读全文
摘要:一,问题描述 给定一个整数N,求解该整数最少能用多少个Fib数字相加得到 Fib数列,就是如: 1,1,2,3,5,8,13.... Fib数列,满足条件:Fib(n)=Fib(n-1)+Fib(n-2) Fib(0)=1 Fib(1)=1;Fib数字,就是Fib数列中的某个数。 比如70 = 55
阅读全文
摘要:一,问题描述 给定一棵二叉树 和 一个整数,打印出二叉树中结点值的和为给定的整数的所有路径。注意:路径是指:从二叉树的根结点开始的,往下一直到叶子结点过程中 所经过的结点(包括根结点(起点)和叶子结点(终点))。 其中,关于二叉树相关知识可参考:二叉查找树的递归实现及递归分析(http://www.
阅读全文
摘要:一,问题介绍 给定一棵二叉树,按照层序遍历的顺序打印二叉树。但是要求,每一行打印一层数据。 二,算法分析 借助二叉树的层序遍历来实现(使用队列的先入先出性质保证打印的顺序)。 为了按行打印 :需要额外两个变量,一个变量用来保存当前层 还未打印的结点个数,另一个变量保存下一层待打印的结点个数。二叉树层
阅读全文
摘要:一,问题介绍 近来接触了不少关于二叉树的递归操作的题目,对递归又有了更深一步的理解。这篇文章要解决的问题是: 给出一个序列,判断该序列是否为二叉树查找树的后序遍历序列。我们知道:二叉树查找树中序遍历是有序的。也就是说,给定了后序遍历序列,其实就知道了中序遍历序列。因为,把后序遍历序列排序就得到了中序
阅读全文
摘要:一,问题介绍 本文章讨论两个问题: ①如何判断两棵二叉树的结构是一样的、对应的每个结点都有着相同的值。--即判断两棵二叉树是一样的 ②给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子结构 ③给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子树 注意,子结点与子树有那么一点点不同。 上面的二叉树
阅读全文
摘要:一,问题描述 给定一个N x N 的矩阵(方阵),按照从外向里的以顺时针方向依次打印矩阵中的每个元素。 比如:一个 3X3的矩阵如下:打印顺序为:1 2 3 6 9 8 7 4 {1,2,3}{4,5,6}{7,8,9} 打印方向如下: 二,算法思路 可以采用递归的方式来打印整个矩阵中的元素。 首先
阅读全文
摘要:一,问题介绍 求解一棵二叉树的镜像。所谓镜像,就是从二叉树的根到叶结点的每一层,将所有的非叶子结点的孩子进行交换。 比如说,下面两棵二叉树互为镜像: 二,算法分析 从根结点开始,先交换根结点的左右孩子, 然后再依次交换根结点的左右孩子的孩子...... 时间复杂度分析:由于每个结点都会遍历一次,故时
阅读全文
摘要:一,问题描述 给定一个字符串,找出一个 其中只出现一次的字符 如"abaccdeff" 只出现一次的字符有 'b' 'd' 'e' 二,问题分析 ①字符集是个常量 ,字符只有那么多。比如ASCII 一共256个,比如 字母表一共只有26个,再比如数字,一共0-9 只有10个 ②出现一次,说明是次数。
阅读全文
摘要:一,介绍 前面实现了字符串转换成整形数值。参考这里: 它不支持小数,不支持符号(正、负号) 现在实现一个更复杂一点字符串转换成数值的程序。 它支持“浮点字符串”转换成对应的浮点数值,如: "123.45" --> 123.45 支持字符串前面或者后面有空格的情况,如:" 123.45 " --> 1
阅读全文
摘要:一,问题描述: 给定两个不同长度的字符串,查找短字符串在长字符串中第一次出现时的索引。 比如:s = "I come from china, You come from India" , t = "from" 此时"from"在 s 中第一次出现的索引为 7 二,算法分析: 依次扫描字符串 s 中的
阅读全文