
算法
文章平均质量分 61
lihappy999
这个作者很懒,什么都没留下…
展开
-
判断俩链表是否相交
给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?建立hash表:由于节点地址指针就是一个整型,假设链表都是在堆中动态创建的,可以使用堆的起始地址作为偏移量,以地址减去这个偏移量作为Hash函数。a、都无环。b、一个有环一个无环。原创 2012-03-07 19:44:36 · 2485 阅读 · 0 评论 -
r-b tree vs avl
http://blog.youkuaiyun.com/giant1st/article/details/3461301转载 2012-05-05 10:40:07 · 626 阅读 · 0 评论 -
最长公共字串
56.最长公共字串(算法、字符串)。题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公转载 2012-04-13 16:57:26 · 1482 阅读 · 0 评论 -
kmp
转自:http://duanple.blog.163.com/blog/static/709717672009825004092/kmp 首先这个匹配算法,主要思想就是要充分利用上一次的匹配结果,找到匹配失败时,模式串可以向前移动的最大距离。这个最大距离,必须要保证不会错过可能的匹配位置,因此这个最大距离实际上就是模式串当前匹配位置的next数组值。也就是max{Aj 是 Pi 的后转载 2012-03-23 11:35:37 · 542 阅读 · 0 评论 -
37.(字符串)
37.(字符串)有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。涉及图原创 2012-03-22 17:15:50 · 583 阅读 · 0 评论 -
38
38. 1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式。递归,x=1,y=32.有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录。3.大量的URL字符串,如何从中去除重复的,优化时间空间复杂度1. Use hash map i原创 2012-03-22 17:15:10 · 942 阅读 · 0 评论 -
39.(树、图、算法)
39.(树、图、算法)网易有道笔试:(1).求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。见前面某题(2).求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边,有向图不再连通,描述算法。answer: 图的割点问题,深原创 2012-03-22 17:14:35 · 778 阅读 · 0 评论 -
44.腾讯面试题
44.腾讯面试题:1.设计一个魔方(六面)的程序。应该不是让求魔方的解法,求魔方解法也是有公式的,不同的情况按分支套公式就行。依题意可能是让实现一个模拟魔方的程序。不讨论UI,只讨论魔方算法的实现。六个3*3矩阵,各矩阵初值内部相同两两间互不相同,对应每个面。魔方转动只有为两种:正对该面时顺时针转动或逆时针转动。先声明各面排列,比如1对3、2对4、5对6转载 2012-03-22 21:16:53 · 1542 阅读 · 0 评论 -
生产者、消费者
34.(队列)实现一个队列。队列的应用场景为:一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列多线程、信号量代码参考http://blog.youkuaiyun.com/yuucyf/article/details/6717135原创 2012-03-20 20:14:22 · 763 阅读 · 0 评论 -
和等于 m的任意可能组合
编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.//coder:LEE//20120315#include#include#includeusing namespace std;//solution1void Combine(int beg,int end,int原创 2012-03-15 22:27:43 · 545 阅读 · 0 评论 -
输出一个单向链表中间的结点
扩展:输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个。思路一:先遍历一遍链表,获得链表节点总数,再根据总节点数的奇偶性输出中间节点。思路二:两个指针,一快一慢,慢指针每走一步,快指针走两步。当快指针指向节点的下一节点或下一节点的下一节点为空时,慢指针所指即是中间节点。//coder:LEE//20120310#inc原创 2012-03-10 20:13:28 · 2657 阅读 · 0 评论 -
卡塔兰数
前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796... 参考:http://www.cppblog.com/MiYu/archive/2010/08/07/122573.html原创 2012-03-27 14:57:55 · 1479 阅读 · 0 评论 -
求PI
话说题目是,用随机算法求PI,就是圆周那个PI。随机算法神马的从来都是用过,没写过,这里随便贴个线性同余法 其中b >= 0,c >= 0,d 理论的东西,不折腾了,老实说我也不会,这里直接用c库里的rand,种子也不初期化了。原理是很简单了,以圆心为原点,往上面扔随机点,如果随机点的个数足够多,无疑圆心内的点数除以总点数 = (PI * p转载 2012-03-26 23:30:42 · 873 阅读 · 0 评论 -
洗牌
void shuffle(int *A,int n){ int i=n-1; while(i!=0) { int index=Rand()%i; Swap(A[index],A[i]); i--; }}1.每个数都不在自己原来的位置了。2.不会把结果限制在一个小区域内。3.生成任意满足条件的排列都是等概率的。原创 2012-03-26 20:45:58 · 575 阅读 · 0 评论 -
【转】[面试题] 求数组两两之差绝对值最小的值
转载自 timematter最终编辑 timematter 由于准备找工,最近也用零星的时间做了一些面试题,这道题属于偏难的那种了,之所以说它偏难,主要是因为按常规思维不容易得到最优解,更重要的是,此题的转化不容易想到。做过编程之美的同学都能了解到,很多题目都需要一种“转化”的思想,把问题转化为另一种已知的熟悉的问题去求解,这种思路在《如何解题》也是被提到了很转载 2012-07-03 18:18:40 · 887 阅读 · 0 评论