摘要: 淘宝笔试题:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。题目的只是层遍历的变形。。朋友过来一起玩了几天,不亦乐乎。。。结果写些code都是一堆一堆bug。。。 1 struct SBinaryTreeNode // a node of the binary tree 2 { 3 int m_nValue; // value of node 4 SBinaryTreeNode *m_pLeft; //... 阅读全文
posted @ 2013-04-11 12:50 legendmaner 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 某同学的同学摩根电面的一道题目:有一个大的textfile,里面很多英文单词,查找重复出现的单词;题目的简单:全部遍历太慢,考官说太慢,为什么不使用stl的map实现呢?如果不是单词呢?如果是url呢?为什么不使用hash_map呢?Good!如果还是单词,能不能再快点呢?能,使用强大的Trie吧!使用stl的map实现:#pragma warning(disable : 4786)#include <iostream>#include <string>#include <map>using namespace std;int main(){ map< 阅读全文
posted @ 2013-04-05 13:42 legendmaner 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 百度2012实习生校园招聘笔试题数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。要求空间复杂度为O(1)。注:al[i]元素是支持'<'运算符的。先是琢磨良久,是否可能时间复杂度为O(n),因为这让我想起了,左旋转数组的相关的算法。深陷下去后,突然什么光一闪。。。果断放弃,使用最简单的算法,几分钟笔墨,错改调。(上次就是如此深陷泥潭而不可自拔): 1 void swap(int *a, int *b) 2 { 3 int tmp; 4 5 tmp = *a; 阅读全文
posted @ 2013-04-04 20:16 legendmaner 阅读(2001) 评论(0) 推荐(0) 编辑
摘要: 搜狐2012.9.15校园招聘会笔试题编程题:写代码,反转一个单链表,分别以迭代和递归的形式来实现typedef struct node LinkNode; struct node { int data; LinkNode* next; }; // 返回新链表头节点LinkNode *reverse_link(LinkNode *head)LinkNode *reverse_link_recursive(LinkNode *head)真不难简单,可有些细节的东西就是不会处理。。。。⊙﹏⊙b迭代: 1 LinkNode *reverse_link_my(LinkNod... 阅读全文
posted @ 2013-04-03 16:19 legendmaner 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 小米2013校园招聘笔试题看一眼不会做;再看一不就是求无连通图的个数么;再想了想,挫计一堆再想算了,不想了;头发短见识短。。。查,一篇文章关于并查集,还开始没看,什么光一闪,笔墨伺候。。。其实太简单了,真是见识短: 1 int myfriend(int n, int m, int* r[]) 2 { 3 int *flag,i,tmp; 4 int cnt; 5 int cnt2; 6 7 flag = (int *)malloc(sizeof(int)*n); 8 9 for (i=0; i<n; i++)10 {11 fl... 阅读全文
posted @ 2013-04-03 10:08 legendmaner 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 没头没脑琢磨了一整晚,什么P也没整出来,人不能不服老啊。。。其实以前看过,只是看懂而已,没有深刻理解;出来混总是要还得!以前从没有想过:初始条件是什么?什么时候进栈?什么时候出栈?终止条件是什么?一看题目就想如何模拟递归的方式实现。结果就载着各种细节中,而且越陷越深;想当年看递归也是这么陷入进去。。。这次卡就卡在了,什么时候出栈?是什么条件导致出栈?出栈原因很简单,遇到空指针则需要出栈了。结果进栈的时候,我还判断是否为空,空就不进栈,然后,然后就没有然后了。。。。这个是卡死的关键点,起码是我之前没有去想的。试想N个节点不是有N+1个空指针么?如果遇到一个空指针,就退栈一个节点不是OK了么~是不 阅读全文
posted @ 2013-04-02 09:32 legendmaner 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 不使用加减乘除,可以考虑移位。与运算可以反映两数相加的进位情况;异或反映了两数相加不考虑进位的结果;两数的相加结果就为进位的数加上不进位的数;这样,递归关系就出来;何时停止?当不再有进位的时候,就可以直接返回异或的结果了。 1 int bitadd(int a, int b) 2 { 3 int u, c; 4 u = a & b; //进位 5 c = a ^ b; 6 7 if (u != 0) 8 { 9 return bitadd(u<<1, c);10 }11 else12 {13 re... 阅读全文
posted @ 2013-04-01 12:56 legendmaner 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 时间限制:1 秒内存限制:32 兆特殊判题:否题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。输入:每个测试案例包括2行:第一行输入一个整数n(1<=n<=100000),表示数组中元素的个数。第二行输入n个整数,表示数组中的每个元素,这n个整数的范围是[1,1000000000]。输出:对应每个测试案例,输出出现的次数超过数组长度的一半的数,如果没有输出-1。样例输入:91 2 3 2 2 2 5 4 2样例输出:2 1 #inc 阅读全文
posted @ 2013-03-30 11:36 legendmaner 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 电路布线在一块电路板的上、下两端分别有n个接线柱。根据电路设计,要求用导线(i,π(i))将上端接线柱i与下端接线柱π(i)相连,如图所示。其中,π(i),1<=i<=n是{1,2,…,n}的一个排列。导线(i,π(i))称为该电路板上的第i条连线。对于任何1<=i π(j)。在制作电路板时,要求将这n条连线分布到若干绝缘层上。在同一层上的连线不相交。你的任务是要确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。换句话说,就是确定导线集Nets={ i,π(i),1<=i<=n}的最大不相交子集。今天看书实在看不下去,闲得无聊随手拿了本算法书以乱心智。心烦 阅读全文
posted @ 2013-03-29 19:34 legendmaner 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 时间限制:1 秒内存限制:32 兆特殊判题:否题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?输入:输入有多组数据,每组测试数据包括两行。第一行为一个整数n(0<=n<=100000),当n=0时,输入结束。接下去的一行包含n个整数(我们保 阅读全文
posted @ 2013-03-28 21:06 legendmaner 阅读(257) 评论(0) 推荐(0) 编辑