摘要:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串 的长度为1-255字节。假设目前有一千万个记录, 这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个 。一个查询串的重复度越高,说明查询它的用户越多, 也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。 (1)请描述你解决这个问题的思路; (2)请给出主要的处理流程,算法,以及算法的复杂度。分析:直接放到内存需要的空间 255*1000 0000 = 255 * 10M = 2.5G (内存限制1G)去重复后300 0000 * 255 = 255 * 3M < 1
阅读全文
随笔分类 - 笔试题
笔试题集锦
摘要:在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包 含了正确英文单词的词典,请你设计一个拼写纠错 的程序。 (1)请描述你解决这个问题的思路; (2)请给出主要的处理流程,算法,以及算法的复杂度; (3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。1 用map建立字典2 跟踪用户输入,当遇到一个非字母字符时,则一个单词输入完毕。3 取得该单词,到map里面查找,存在则该单词正确,否则拼写错误。复杂度:空间复杂度存储字典的复杂度:假如有10000个单词,平均长度为8,8*20000/8Byte = 20KB时间复杂度:查找字典O(lgN, N=200
阅读全文
摘要:1. 编程: 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。2. 编程:用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。void * memmove(void *dest,const void *src,size_t n){ if (!dest && !src || dest == src) return dest; int i=0; char *d = (char *)des...
阅读全文
摘要:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。* 木杆很细,不能同时通过一只蚂蚁。开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,* 但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。* 编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。分析:根据题意,初始状态就决定了最终的时间。所以只要遍历所有可能的初始状态就能找出最大最小时间。每只蚂蚁的初始状态由方向、位置决定,这里位置固定了,所以只考虑可能的方向。只有两个可能的方向,所以初始状态数为2^n(n蚂蚁的数量)碰头的检查:这
阅读全文
摘要:题目:给定n个整数,求对应的哈夫曼树的高度考虑建立哈弗曼树的过程:每次从所有节点中选择最小的两个节点组成新的节点,新节点的权值是两个节点权值之和,并删除这两个节点。因此我们可以用一个数组来实现。1 将数组降序排序 (最小的两个在末尾)2 将数组最后两个元素合并为一个,其层数为原来两个元素的最大层数加13 数组长度减一4 新数组再排序 -->第一步循环直到数组长度为1struct Node { int value; int layer;};//降序排列int cmp(const void *a, const void *b){ struct Node *t1 = (struct...
阅读全文
摘要:给定一个字串X,求它最长字串S,使得S=SR,SR为S的反序,即如果S=abc,则SR=cba例子:X=abccba,则输出S=abccba遍历X的子串,从最长子串开始,对每一个子串判断其是否为反身字串,是则找到所需字串bool IsReverseString(const char *str, int s, int len){ const char *start = str+s, *end=str+s+len-1; while ( start <= end) { if (*start== *end) { start++, e...
阅读全文
摘要:表达式求值,一个字符串只由'+','-',和‘0’-‘9’组成,并且'+','-'只作为二元运算符。bool calculate(const char* exp, int &result);bool calculate(const char* exp, int &result){ result = 0; char str[50]; int i=0; char op; //get the first oprand while (*exp && *exp != '+' &&
阅读全文
摘要:题目:1打印如下形式的矩阵;n=5:129 10 25438 11 24567 12 2316 15 14 13 2217 18 19 20 21n=6:129 10 25 26438 11 24 27567 12 23 2816 15 14 13 22 2917 18 19 20 21 3036 35 34 33 32 31分析:可以看出有这样的规律 --- 按right, down, left, down, right, up这样的路线跌增,并且只有在left,up时可能完成打印。方法:按照这个规律先生成数组,然后再打印#define N 9void PrintMatrix(){ i...
阅读全文