上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页
摘要: 1. 简述 假设有这样一个拥有3个操作的队列: 1. EnQueue(v):将v加入队列中2. DeQueue:使队列中的对首元素删除并返回此元素 3. MaxElement:返回队列中的最大元素 请设计一个数据结构和算法,让MaxElement操作的时间复杂度尽可能的低。2. 思路起初没仔细看,还以为与此前的自定义栈-pop-push-min-时间复杂度都为O(1) 是一样的,后来才发现不是一回事,有差别的。对于栈来说,我们可以的入栈和出栈不会影响辅助数组内的情况,假设当前N个元素,(为了说明简单,下标从1开始),辅助空间的F[1]记录的是A[1,1]内的最值位置,F[2]记录的是A[1,2 阅读全文
posted @ 2011-09-10 11:11 xiaodongrush 阅读(1905) 评论(0) 推荐(1) 编辑
摘要: 1. 简述 给出两个链表的头指针,比如h1,h2,判断这两个链表是否相交。这里是为了简化问题,我们假设两个链表不带环。 扩展:如果链表可能有环呢? 扩展:如何求出两个相交链表的相交的第一个节点。2. 分析 这道题,个人感觉理解的还是相对比较清楚完整。主要就是两个问题,问题一,两个链表是否相交,问题二,两个链表如果相交,求得相交第一个节点。 如果两个链表相交,那么要么两个链表都没有环,要么都有环。所以我们首先判断h1和h2是否有环:三种情况:一个有环一个没环(这种情况说明肯定不相交),两个都有环(需要进一步判断),两个都没有环(需要进一步判断)。 一个链表是否有环的判断方法很简单,就是两个指针, 阅读全文
posted @ 2011-09-09 20:47 xiaodongrush 阅读(1077) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 这道题的题干说的不是特别清楚,在网上看了几篇相关的博文才搞清楚,对于算法本身就是编程之美给出的解法,现在我还没有深入的理解。题干大意如下:输入两个字符串,一个表示用户输入的查询,另一个表示一篇文档的内容。对于查询和文档分别进行自动分词后,用户查询和文档内容的两个字符串变为两个词语序列。比如,下面的keyword表示分词后的用户查询,str表示分词后的文档内容。stringkeyword[]={"微软","计算机","亚洲","中国"};stringstr[]={"微软"," 阅读全文
posted @ 2011-09-08 19:26 xiaodongrush 阅读(3201) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点)。请将该节点从单链表中删除。 扩展题目:给定一个链表头指针,将单链表逆置。2. 思路 对于第一个问题,首先把要删除的节点内容交换到后面节点上去,然后将后面的节点删除。注意,如果当前删除的节点是最后一个节点的时候,是无法搞定的。assert(Curr!=NULL&&Curr->Link!=NULL);swap(Curr->value,Curr->Link->value);Tmp=Curr->Link;Curr->Link=Tmp-> 阅读全文
posted @ 2011-09-07 21:38 xiaodongrush 阅读(669) 评论(0) 推荐(0) 编辑
摘要: 1. 简述使用两个字符串之间的编辑距离计算它们的相似度,相似度=1/(编辑距离+1)。两个字符串的编辑距离:指通过下面三种操作可以将两个字符串变为相同的字符串需要的次数。1) 修改一个字符 2) 增加一个字符 3) 删除一个字符。 对于"abcdefg"和"abcdef"两个字符串来说,我们认为可以通过增加/减少一个"g"的方式来达到目的,将两个字符串变成相同字符串的最小步数为1,因此编辑距离为1,相似度=1/(1+1)=0.5。给定两个字符,编程实现计算它们的相似度。2. 思路 这道题我暂时没什么新的想法,基本上是沿用书上的方法。见 阅读全文
posted @ 2011-09-07 20:39 xiaodongrush 阅读(481) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 电话的号码盘一般可以用于输入字母。如用2可以输入A、B、C,用3可以输入D、E、F等。 对于号码5869872,可以依次输出其代表的所有字母组合。如:JTMWTPA、JTMWTB······ 1) 设计程序,尽可能从这些字母组合中,找到一个有意义的单词来表述一个电话号码。如单词"computer"来描述号码26678837。 2) 对于一个号码,是否可以用一个单词代表?怎样才是最快的方法?2. 思路 由于两个任务都需要判断一个字母组合是否是一个单词,所以必须预先存一份单词列表。 方法一:直接对号码进行深 阅读全文
posted @ 2011-09-07 16:53 xiaodongrush 阅读(1630) 评论(1) 推荐(0) 编辑
摘要: 1. 简述 给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD,s2=ACBD,返回false。2. 思路 将问题转化为:判断s1s1中是否包含s2子串。即对于s1=AABCD和s2=CDAA,判断AABCDAABCD中是否存在AA。 使用KMP匹配就行,对于s1s1也不用特地去开辟空间,假设s1的字符串指针为str,长度为len_str,只需len_str += len_str和str[i%len_str]即可。3. 参考资料 编程之美,3.1节,字符串移位包含的问题 阅读全文
posted @ 2011-09-07 16:18 xiaodongrush 阅读(359) 评论(1) 推荐(0) 编辑
摘要: 1. 简述 题目描述: Str1中可能包含的字符:除了'*'和'?'以外的任意字符。 Str2中可能包含的字符:任意字符。其中,'?'表示匹配任意一个字符,'*'表示匹配任意字符0或者多次。给出这样两个字符串,判断Str2是否是Str1的子串,如果是输出第一个匹配到的子串,如果不是,输出"不是子串"。2. 分析对于'?'的处理,只要在匹配的时候将代码由:if(str1[i]==str2[j]) 改为 if(str1[i]==str2[j] || str2[j]=='?')即可。 阅读全文
posted @ 2011-09-07 11:45 xiaodongrush 阅读(9120) 评论(3) 推荐(0) 编辑
摘要: 1. 简述 本文主要是关于均匀随机排列数组的一个学习总结,主要参考资料是算法导论。2. 相关题目 据说腾讯一个题目:对于一个斗地主游戏,给出一个发牌的算法,让每个人的牌确保随机。 分析:考虑假设有N张牌,要分出来M张牌,给K个人。我能想到的是,N张牌有N种排列,随机产生一种排列,将产生排列的前M张牌依次分给K个人。使用均匀随机排列算法,能够保证:对于N张牌的N!种排列,且得到的任意一种排列的概率都是相同的,即都为1/(N!)。3. 判定方法 对于一个算法能否保证均匀随机排列数组,主要考查两点: · 产生的排列个数是N!个 · 每种排列的概率相同,即都为1/N!4. 两个算法 阅读全文
posted @ 2011-09-05 15:27 xiaodongrush 阅读(2811) 评论(3) 推荐(0) 编辑
摘要: 1. 简述 在一篇博客上看到的题目,说是网易有道的面试题,用上一篇文章的方法还是很好推导出来的。2. 题目打印如下形式的矩阵n=5:1 2 9 10 254 3 8 11 245 6 7 12 2316 15 14 13 2217 18 19 20 21n=6:1 2 9 10 25 264 3 8 11 24 275 6 7 12 23 2816 15 14 13 22 2917 18 19 20 21 3036 35 34 33 32 313. 分析 仔细看可以发现:2-3-4是一条路径,5-6-7-8-9是一条路径,即一个向下走向左拐,另一个是先右走向上拐,就这两种路径,依次重复出现。 阅读全文
posted @ 2011-09-03 10:56 xiaodongrush 阅读(337) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页