
编程练习
文章平均质量分 59
steven30832
程序员,还在上学
展开
-
归并中值
问题:两个数组A、B,都已排好序,现在要求A、B归并后的中值。思路:1.可以采取归并的思路,用四个标记分别指向两个数组的首和尾,然后开始当消除一个共同最小值,则同时消除一个共同最大值,直到最后一个首指针和一个尾指针指向同一个值的时候,复杂度O(len(A)+len(B))2.二分思路。分别找到A和B的中值,如果mid(A)代码:#includ原创 2012-09-24 10:29:53 · 436 阅读 · 0 评论 -
寻找最大子树
问题描述:给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大? 思路:采用自底向上的计算。先计算左右子树总和值,用左右子树的总和加上当前节点值,如果当前总和大于最大值,则更新最大值,同时将最大子树根节点更新为当前根。简单说,就是后序遍历。代码:#include #include using namespace std;stru原创 2012-09-19 16:04:09 · 2058 阅读 · 0 评论 -
组合数求解
从N个数中选择k个,共有多少组合?简单说就是求解C(N,k)。实际问题,有N个教授,要选择k个组成委员会,共有多少种组合方式?递归法:将这N个人按照编号从小到大排好, 1,2,3...,k,...N现在考虑从前M个人中选择k个,那么有两种情况:1. 第M个人选进去,那么就是从剩下的M-1个人中选择k-1个,再加上第M个组成;2. 第M个人不选进去,那么就是直接从原创 2013-01-02 14:47:49 · 711 阅读 · 0 评论 -
动态规划之----最长公共子序列(LCS)
这个问题是动态规划算法中的一个经典问题,先看问题描述:LCS:两个字符串 X和 Y,找到他们最长的公共子序列,该序列不要求是连续的。公共子序列的意思就是序列的相对顺序是不变的,但是序列不一定是连续的。例如:X = "BDCABA"Y = "ABCBDAB"他们的最长公共子序列是BCBA和BDAB,长度都为4,找到任意一个即可。LCS问题也满足最优子结构:原创 2012-12-05 15:07:47 · 1862 阅读 · 2 评论 -
常数时间初始化向量
来自《编程珠玑》1.6.9使用更多的空间来换取更少的运行时间存在一个问题:初始化空间本身需要消耗大量的时间。说明如何使用一种技术,在第一次访问向量的某项的时候将其初始化为0。提示:采用空间换时间的方式,并且空间占用和向量长度成线性关系。这种方式仅在【空间很廉价】【时间很昂贵】【向量很稀疏】的时候有用。一直没有想到这个问题怎么处理,后来上网搜了一下。发现了答案。先看答案:原创 2012-11-29 15:10:40 · 981 阅读 · 0 评论 -
查找数组中的重复数字
题目:一个长度为N的数组,其中存放了0~N-1的各个数组,要求在O(n)的时间复杂度和O(1)的空间复杂度下找到至少一个在其中重复出现的数字。(可能不止一个重复出现的)思路1.考虑到数组长度为N,而数字都没有大于N-1的,则可以考虑采用下标置换的方法。将数字置换到其值对应的下标位置,如果找到某值其对应下标位置已经存有对应值,则说明此值重复,可返回。代码:原创 2012-09-24 09:26:32 · 1476 阅读 · 0 评论 -
链表操作题目
将一个链表分为两个链表,奇数位置节点为一个链表,偶数位置节点为一个链表,并且两个链表反向。代码:#include using namespace std; //链表节点 template struct Node { Type val; Node *next;};//建立链表,依次输入各个节点值,以0结束 template Node*原创 2011-12-28 12:30:34 · 419 阅读 · 0 评论 -
判断两个链表是否相交
思路1:最暴力的办法,针对链表1的每一个节点,判断其是否也在链表2中,复杂度O(n*m)。明显不是一个好方法。思路2:给每个节点增加一个标记量,可以是附在链表中的成员,也可以是另外的一个结构,例如用一个数组来存储。先遍历链表1,标记出遍历过的节点,再遍历链表2,如果发现某个节点已经被遍历过,则说明相交。这种方法时间复杂度为O(n+m),空间复杂度O(n)或者O(m)。思路3原创 2011-12-31 22:47:10 · 331 阅读 · 0 评论 -
最大子序列问题
#include #include using namespace std;/*************************** 求数组list从begin到end中和最大的子序列 ** 参数: list : 要求的数组 begin : 数组的起始位置 end : 数组的结束位置 sbe原创 2012-01-01 16:54:07 · 301 阅读 · 0 评论 -
大规模数据查重【合集讨论】
提出问题☆─────────────────────────────────────☆ realchaoren (超人) 于 (Fri Sep 11 23:54:45 2009) 提到: 1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 2. 有10个文件,每个文件1转载 2012-10-18 09:06:39 · 858 阅读 · 0 评论 -
深度优先搜索(DFS):字符串转换
问题描述:翻译数字串,类似于电话号码翻译:给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2-> b,... , 12 -> l ,... 26-> z。那么,12259 -> lyi 或 abbei 或 lbei 或 abyi。输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。思路:采用深度优先,分别考虑用一个数字字符转换和原创 2012-09-19 16:08:19 · 790 阅读 · 0 评论 -
在升序数组中查找和为特定值的两个数
思路,从左和右同时遍历数组,如果左右相加大于n,则说明右边的值偏大,则右指针左移;如果比n小,则左指针右移;总共对数组只需要遍历一遍。/*在一个升序数组中查找两个数,使得他们的和为已知数n,时间复杂度O(n)*//*返回距离最近的一对*/int* Find(int *array , int len , int n){ int *re = new int[2];原创 2012-02-05 10:43:57 · 919 阅读 · 1 评论 -
最长公共子串(连续)问题
动态规划有一个经典问题是最长公共子序列,但是这里的子序列不要求连续,如果要求序列是连续的,我们叫公共子串,那应该如何得到这个串呢?最简单的方法就是依次比较,以某个串为母串,然后生成另一个串的所有长度的子串,依次去母串中比较查找,这里可以采用先从最长的子串开始,减少比较次数,但是复杂度依然很高!然后重新看一下这个问题,我们建立一个比较矩阵来比较两个字符串str1和str2原创 2012-12-05 15:55:32 · 22096 阅读 · 9 评论