算法与数据结构
文章平均质量分 61
cwqbuptcwqbupt
这个作者很懒,什么都没留下…
展开
-
先序+中序恢复二叉树,非递归
二叉树的存储与恢复问题。先,中,后,任意两个序列就能完全确定一个二叉树。恢复该二叉树可用递归函数,先序的第一个节点为根节点,它把中序分成两部分,左部为该根节点的左子树,右边为右子树,因此,可递归的构造出完整的二叉树。具体的递归实现可参考:http://www.dutor.原创 2011-09-12 16:16:31 · 4812 阅读 · 0 评论 -
微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列
求微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大: 如果没有符合条件的就输出[0,0]格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小网上有动态规划的解法,时间复杂度O(N^3):http://openuc.sinaapp.com/?p=286而本文要提另一种动态规划解法,时间复原创 2012-05-08 16:43:50 · 4771 阅读 · 2 评论 -
快排,非递归;单链表快排;单链表归并
笔面的高频问题。又是现场没答出来,回来再马后炮:用栈实现:1。每次把支点的右段入栈(当然只记录该段的起始与结束标记);2。然后继续对支点的左段重复过程1,若左段的元素小于2个,则不需要再重复1,转到3;3。左段已排好,从栈中取出最新的右段,转到1,若栈空则结束。代码如下:// HelloWorld.cpp : 定义控制台应用程序的入口点。//#include "st原创 2011-10-24 22:32:20 · 2002 阅读 · 0 评论 -
动态规划求解01背包相关的基本问题
背包问题是经典问题,网上已经提供了很多优秀的解法,这里摘录动态规则的方法,同时顺便把背包相关的变形问题也一些阐述。问题:1. 经典背包问题:给定一个载重量为m,n个物品,其重量为wi,价值为vi,12. 变形:要求装入的物品重量最大?(问题很简单,但请先别BS我)3. 变形:要求装入的物品重量刚好等于背包的承重?换一种说法就是:N个数里挑出任意个数,使这些数的和等于某个值M。原创 2012-04-29 22:56:41 · 2841 阅读 · 0 评论 -
[微软]有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小
搜了网上的一些文章,看到一个看似很巧的搜索方法,描述于文http://blog.csdn.net/tianshuai11/article/details/7479767中。转述如下:第一种算法: 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差为 A' = sum(a) - a[i]转载 2012-04-29 01:08:28 · 9231 阅读 · 1 评论 -
[备忘]收集的一些题集(更新中)
前言:以下为本人收集的一些题目与解答,文中的大多题目难度并不会太高,仅是本人觉得比较有趣并且又不需要太多专业知识即可解答,不会太伤脑,仅供大家闲暇时把玩。想要专业算法的网友还请绕道!^_^本中解答较多来自网络,本中也标明了出处,有些解答则仅为本人见解,鉴于水平非常有限,其中有必有诸多疏漏,仅供参考!还望广大网友一起更正与完善!先谢过各位大神!~~---------------------分割线转载 2012-04-25 22:41:48 · 2387 阅读 · 0 评论 -
[约瑟夫环]n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始... ...
http://www.cnblogs.com/dartagnan/archive/2011/09/16/2179143.html[约瑟夫环]n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始... ...题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删转载 2012-04-28 00:29:22 · 1787 阅读 · 0 评论 -
二叉查找树查找后继,前驱的问题
二叉查找树按照二叉树进行组织。二叉查找树关键字的存储方式总是瞒住二叉查找树性质:设x为二查查找树种一个节点。如果y是x的左子树中的一个节点,那么key[x] >= key[y]。如果y是x的右子树的一个节点,那么key[x] 这样对二叉查找树进行中序遍历就可得到书中所有元素的一个非降序排列。查找某一个存在节点的前驱和后继。某一个节点x的后继就是大于key[x]的关键字中最小的那个节点,转载 2012-04-17 10:58:57 · 3535 阅读 · 0 评论 -
一道题:给一个字符串,和一个字符集,求该字符串包含所有字符集的最短子串
比如字符集“abc”.个数为M。字符串:“xxxbxxaxbxxbaxxaaxxcxx”可知要求的最短子串是:baxxaaxxc。仔细分析最短串发现:1。b与c在最短串中仅出现一次,正好是一头一尾。2。中间的字符a,在最短串中可能出现了多次,但对于a而言如果只看它最后一次出现在最短串中,则之前不管是否出现过的都是无所谓的,比如最短串部分改成“bxxxxaxxc”,并不影响结果。原创 2012-04-16 21:39:52 · 3268 阅读 · 0 评论 -
求斐波那契 (Fibonacci) 数列第 n 项的算法
最近看算法导论的习题时联想到 SICP 的一条习题后想到的,折腾了下,得到了几种算法,不同的算法时间复杂度有 Θ(a^n), Θ(n), Θ(lg(n)) 几种。时间复杂度为 Θ(lg(n)) 的算法 比较有意思。下面一个个说,具体算法用 Common Lisp (CL) 实现,至于为什么用 CL 我在文章最后说明。约定符号 ^ 表示乘方运算。F(n) 表示 Fibonacci 数列的第转载 2012-04-27 20:46:13 · 5974 阅读 · 2 评论 -
一道笔试题,去除首尾空白符,中间若有连续空格则保留一个,若出现换行则保留一个换行
比如:" \n \n a b \nc \n \n\nc\nde f g\n\nhi\n\n\n \n "处理后变为:“a b\nc\nc\nde f g\nhi”这里,空白符只考虑空格和换行,若连续的空格超过两个,则留一个;若连续空白符中出续换行,则留一个换行而不留空格。实现过程比较绕,写下面备忘。1. 先分别去除首尾空白符。这比较简单,只不过要注意原创 2011-10-22 17:43:39 · 1330 阅读 · 0 评论 -
二叉树的恢复
最近笔面老碰上这类题,老忘,因此写个备忘。二叉树的三种遍历常用于恢复:先序,中序,后序。对于先+中,后+中这两种组合,对任意二叉树的恢复都有唯一解,但对先+后的情况则不是,这种情况下要满足要求:对所有非叶节点,其两个子节点都存在,也即,一个节点要么是叶节点,要么有两个节点原创 2011-10-14 21:33:07 · 7248 阅读 · 1 评论 -
连续子序列的若干问题
最大和:太经典的问题。不说了。对于最大积问题: 由于负数的存在,我们不能简简单单只存一个当前最大值,我们还需要存当前最小值。 我们令F(n)表示[0,n]区间内以d[n]为结尾的最大积,令G(n)表示[0,n]区间内以d[n]为结尾的最小积,d为原序列,那么有: F(n + 1) = Max{F(n) * d[n + 1], d[n + 1], G(n) * d[n转载 2012-04-19 01:19:36 · 1285 阅读 · 0 评论