面试题库
文章平均质量分 53
rupert123456
在校小硕
展开
-
从海量日志中提取访问百度次数最多的IP
IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中。 可以考虑分而治之的策略,按照IP地址的hash(IP)%M值,将海量日志存储到M个小文件中。每个小文件最多包含4G/M个IP地址。 对于每个小文件,可以构建一个IP作为key,出现次数转载 2011-08-17 15:25:21 · 664 阅读 · 0 评论 -
给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url
可以估计每个文件的大小为50G×64=320G,远远大于内存限制的4G,不可能将其完全加载到内存中处理,考虑采取分而治之的方法。第一步:遍历文件a,使用Hash函数将a文件中的url分别存储到1000个小文件中,这样每个小文件的大约为300M;遍历文件b,使用相同的Has转载 2011-08-17 16:44:23 · 3105 阅读 · 0 评论 -
用递归的策略输出一个字符串的所有排列
#include#includestatic void ExchangeCharacters(char* str, int p1,int p2);static void RecursivePermute(char* str,int k)//递归函数转载 2011-08-18 09:53:26 · 348 阅读 · 0 评论 -
枚举和为m的所有子数列
void Depart(int begin, //基准,防止重复的排列 int m, //被分裂的数 vectorint>& arr //已经分裂转载 2011-08-18 10:14:19 · 277 阅读 · 0 评论 -
求两个有序数组的中位数
如果有两个有序的数组,都是已经排好序的。那么求它们的中位数应该怎样求呢。如果采用对这两个数组进行排序的方法,最快的时间复杂度也要o(nlogn)的时间。但是,如果采用中位数和顺序统学的方法来寻找,则可以在o(n)的时间内解决这个问题。 我们先寻找每个数组的中位数,转载 2011-08-17 21:56:02 · 562 阅读 · 0 评论 -
用递归实现反转一个链表
typedef struct ListNode{ int data; struct ListNode *next;}List;List * reverlist(List *p,List **head){ if(p->next =原创 2011-08-18 11:43:48 · 422 阅读 · 0 评论 -
复制一个复杂的链表
有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。链表结点的结构为:struct C转载 2011-08-18 17:06:14 · 754 阅读 · 0 评论 -
判断两棵二叉树是否相等
在这里要对一种情况进行说明当root1的左子树与root2的左子树相同,root1的右子树与root2的右子树相同时,这两颗二叉树相同。当root1的左子树与root2的右子树相同,root1的右子树与root2的左子树相同时,这两颗二叉树同样相同。以下是实现代码转载 2011-08-27 20:29:27 · 1010 阅读 · 0 评论 -
如何判断两个链表是否相交
判断两个链表是否相交,首先想到的办法估计是比较结点地址,但这个方法是行不通的,因为无法知道链表的规模。于是可以想到一个方法,反转一个链表A,然后从链表B的头结点开始访问,看是否能访问到原来链表A的头结点。原创 2011-10-08 14:42:20 · 316 阅读 · 0 评论