面试....
CNnumen
If i want , i must try...
展开
-
面试的经典问题
<br /> 面试的经典问题面试时,有几个问题是公司面试人员常常会提出的,针对这些问题好好准备,在面试时也就不会哑口无言,无言以对了,下面就面试十大必考题做出分析: <br /><br /> (1)为什么想进本公司? <br /><br /> 这通常是面试官最先问到的问题。此时面试官就开始评断录用与否了,建议大家先判断自己去应征的工作性质,是专业能力导向呢,或是需要沟通能力,其实现在市场多以服务为方向,所以口才被视为基本能力之一,所以在此时就要好好表现自己的口才,而口才较差者就务必表现出自己的专业能力转载 2010-07-28 10:30:00 · 670 阅读 · 0 评论 -
找出数组中出现次数超过一半的数
<br />现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。<br /> <br />思路1:<br /> <br />创建一个hash_map,key为数组中的数,value为此数出现的次数。遍历一遍数组,用hash_map统计每个数出现的次数,并用两个值存储目前出现次数最多的数和对应出现的次数。 <br />这样可以做到O(n)的时间复杂度和O(n)的空间复杂度,满足题目的要求。 <br />但是没有利用“一个数出现的次数超过了一半”这个特点。也许算法还有提高的空间转载 2010-08-01 18:34:00 · 2609 阅读 · 0 评论 -
如何找出字典中的兄弟单词...
给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?原文思路:使用hash_map和链表。 首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。 使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。 开始时,先遍历转载 2010-08-01 18:41:00 · 1519 阅读 · 0 评论 -
从两个文件(各含50亿个url)中找出共同的url
<br />给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?<br /> <br />思路:<br />可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 <br />遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中。这样每个小文件的大小约为300M。遍历文件b,采取和a相同的方转载 2010-08-01 19:58:00 · 3206 阅读 · 0 评论 -
判断数字是否出现在40亿个数中?
<br />给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?<br /> <br />思路:<br />unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。<br /> <br />原文链接:http转载 2010-08-01 20:08:00 · 2983 阅读 · 2 评论 -
查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
<br /><br />《编程珠玑》在第15章“珍珠字符串”一节,给出了一个非常漂亮的实现 - 基于目标字符串的后缀数组的实现。<br /><br />后缀数组类似于后缀树,但是又有所不同。<br />后缀树常用来查找某一段文字中是否出现过(多个)模式串,通过对目标文字段预处理建立后缀树实现。(如果你不明白,参考本blog有一个 字符串模式匹配总结的文章,里面有一篇参考文章将后缀树)。<br />也可以参考如下文章。<br />后缀树学习 - [ACM]<br />http://kinslovertec.b转载 2010-08-11 14:43:00 · 1052 阅读 · 0 评论 -
寻找缺失的数字...
<br /> <br />有一组数字,从1到n,中减少了一个数,顺序也被打乱,放在一个n-1的数组里<br />请找出丢失的数字,最好能有程序,最好算法比较快<br />#include <cstdlib>#include <iostream>using namespace std;int findMissNum(int *a, int count){ int res = 0; for(int i=0; i< count; i++) res原创 2010-08-11 15:30:00 · 2022 阅读 · 0 评论 -
快速删除p指向的节点...
<br />只知道指针P指向一个单向非循环链表的节点,不是头节点也不是尾节点,从链表上把 P指向的节点删除...<br /> <br />思路:<br />一般的思路是要遍历链表找到节点P的前驱节点, 然后再删掉节点P, 但是这样效率不是很高, 可以换个思路, P节点的后继节点是可以在O(1) 复杂度下得到的, 可以将P的后继节点的数据复制到P节点中, 然后删掉P的后继节点, 重新接链即可...<br />实现如下:<br /> <br />temp = p->next;p->data = p->nex原创 2010-08-11 15:42:00 · 2652 阅读 · 2 评论 -
芯片测试...
<br />有2k块芯片,已知好芯片比坏芯片多。请设计算法从其中找出一片好芯片,说明你所用的比较次数上限。<br />其中好芯片和其它芯片比较时,能正确给出另一块芯片是好还是坏。坏芯片和其它芯片比较时,会随机的给出好或是坏。<br /> <br />思路:<br />两块芯片比较,结果可能是(好好),(好坏),(坏坏)。如果结果是(好好),则可能是两块好芯片,也可能是两块坏芯片。如果结果是(好坏)或者(坏坏),则两块芯片中至少有一块是坏的。<br />1. 将2k块芯片分成k组,每组两个比较。如果结果是(好转载 2010-08-11 16:46:00 · 1273 阅读 · 2 评论 -
海量数据处理题目汇总
<br /> <br />1、有1亿个浮点数,请找出其中对大的10000个。提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相当大的空间,因此不能一次将全部读入内存进行排序。<br /> 可以发现如果一次读入那么机器的内存肯定是受不了的,因此我们只有想其他方法解决,解决方式为了高效还是得符合一定的该概率解决,结果并不一定准确,但是应该可以作对大部分的数据。<br />(1.我们可以把1亿个浮点数分组为100W个一组,这样就分为了100个组,第一次在每个组中找出最大的1W个数,第二次查询的时候就转载 2010-08-11 21:24:00 · 1342 阅读 · 0 评论 -
面试非技术经验or注意事项总结...
<br /> 1、自我介绍(中英文版) 任何单位都必问的第一个问题。看似简单,却是最重要的问题,因为他是面试官了解你的窗口,通过这个窗口而对你产生第一印象。如果你的自我介绍给他留下了深刻的印象,那么你已经成功一半了;而如果你的自我介绍很平庸,让人看不到亮点,那么你基本上已经失败了,因为面试官不可能主动去发现你的亮点。尽管自我介绍每个人都会准备,但是好坏却有质的差别。 首先要明确,你应该向面试官介绍些什么。个人认为,应该把自己简历中的亮点和闪光点有层次、有条理的介绍给面试官,让转载 2010-08-19 00:31:00 · 1788 阅读 · 0 评论 -
参加面试时如何有技巧的回答一系列的问题
<br /><br />应届生在参加面试时如何有技巧的回答一系列的问题。<br /><br /> 开始之前务必记住:<br /><br /> 黄金法则:80/20---你要承担起80%的谈话而面试官只会说20%。<br /><br /> 白金法则:你必须试着控制面试的节奏和话题。<br /><br /> 钻石法则:对于没有把握的问题,抛回给面试官。<br /><br />1.在一分钟内介绍一下你自己<br /><br /> 这似乎是必答题。不要以为这很容易。如果你用一分钟来重复你的简历,恭喜你,你转载 2010-08-19 01:04:00 · 1462 阅读 · 0 评论 -
面试题之IQ与逻辑推理题
<br /> <br />1、据说此题曾被用来应聘微软公司的高级人才。嘿嘿!各位可有兴趣试试身手,若有志者,看招了! <br /> 有两间房,一间房里有三盏灯,另一间房有控制这三盏灯的开关(这两间房是分割开的,毫无联系)。现在要你分别进这两间房一次,然后判断出这三盏分别是由哪个开关控制,你能想出办法吗?(注意:每间房只能进一次)注:这题如果加上是白炽灯会更好点。<br />先开开关A,过段时间,关A,开B,去另一房间,亮着的灯是B控制,不亮的灯中热的是A控制,冷得是C控制。<br />2、一天中午,三个男青转载 2010-08-18 16:44:00 · 3005 阅读 · 0 评论 -
面试——前3分钟定终身
<br />寒暄、问候<br /> 现在大家都知道“前3分钟定终身”,而前3分钟所能说到的,通常就是寒暄和问候等看似与面试毫无关系的话题。也许你会说:“面试考察的就是专业知识,我就盼着赶快进入正题。”其实,你既然已经被通知去参加面试,就说明你的专业背景已经与企业所要求的条件基本吻合了,那么面试人员主要看什么呢?就是看你是否与这个企业的员工气味相投(chemistryfit),并通过你的言谈举止考察你的沟通交际能力。所以有经验的面试人员会在前3分钟聊天气、交通、时事、近来的热点问题等,甚至聊办公室附转载 2010-08-19 00:32:00 · 1054 阅读 · 0 评论 -
面试十大难题样板回答
<br />1、为什么不谈谈你自己? <br /><br /> <br /><br />分析:这是个开放性问题。从哪里谈起都行,但是滔滔不绝地讲上一两个小时可不<br />是雇主 <br /><br />所希望的。这样的问题是测验你是否能选择重点并且把它清楚、流畅地表达出来。<br />显然, <br /><br />提问者想让你把你的背景和想要得到的位置联系起来。 <br /><br /> <br /><br />回答对策:有几个基本的方法。一个是直接简要回答所问的问题,另一个是在回答<br />前要转载 2010-09-15 15:36:00 · 1255 阅读 · 0 评论 -
海量数据统计总结...
1.有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。如何按照query的频度排序。海量2.日志数据,提取出某日访问百度次数最多的那个IP。对于这类问题, 通常要使用分而治之的思想, 因为内存中不能够存放的下所有的数据, 为了保证将海量数据分成几个小块后, 每个小块中的元素都互不相同, 也就是值相同的元素要被分到同一个数据块中, 可以使用hash的方法, hash(value) % n, n就是要分的块数, 这样在每个小块中在使用hash_map的方原创 2010-08-01 18:28:00 · 1327 阅读 · 0 评论 -
海量日志数据,提取出某日访问百度次数最多的那个IP。
<br />IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中。 <br />可以考虑分而治之的策略,按照IP地址的hash(IP)%1024值,将海量日志存储到1024个小文件中。每个小文件最多包含4M个IP地址。 <br />对于每个小文件,可以构建一个IP作为key,出现次数作为value的hash_map,并记录当前出现次数最多的1个IP地址。 <br />有了1024个小文件中的出现次数最多的IP,我们就可以轻松得到总体上出现次数最多的IP。 <br /> <br />原文链接:ht转载 2010-08-01 18:11:00 · 5639 阅读 · 3 评论 -
在给定整数序列中,找出最大和的子序列...
<br />给定一个整数序列,其中有些是负数,有些是正数,从该序列中找出最大和的子序列。比如:-5,20,-4,10,-18,子序列[20,-4,10]具有最大和26。<br /> <br />/*给定一个整数序列,其中有些是负数,有些是正数,从该序列中找出最大和的子序列。比如:-5,20,-4,10,-18,子序列[20,-4,10]具有最大和26。*/#include <cstdlib>#include <iostream>using namespace std;void get原创 2010-08-01 12:30:00 · 3058 阅读 · 2 评论 -
单向链表中,如何在给定节点前快速插入一个节点?
<br />对于单向链表来说,在某个节点后面插入一个新节点是非常快的。<br />所以我们可以在给定节点后面插入一个新节点,然后交换给定节点和新节点的数据即可。<br /> <br />原文链接:http://hi.baidu.com/mianshiti/blog/item/e69a1f02885569057bec2c89.html转载 2010-08-01 17:13:00 · 1775 阅读 · 0 评论 -
找出1到10w中没有出现的两个数字
<br />有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?<br /> <br />思路1:<br />申请10w个bit的空间,每个bit代表一个数字是否出现过。<br />开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。<br />然后依次读入已经打乱循序的数字,并将对应的bit设为1。<br />当处理完所有数字后,根据为0的bit得出没有出现的数字。<br /> <br />思路2:<br /> <br />首先计算1到10w的和,平方和。<br />然后计算给定数转载 2010-08-01 18:04:00 · 1953 阅读 · 0 评论 -
第K大数的位置...
<br />写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,<br />第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。 <br />函数接口为:int find_orderk(const int* narry,const int n,const int k)<br /> <br />//写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,//第一大的数是7,位置在4。第二大、第三大的数都是4,位置在原创 2010-07-31 22:26:00 · 1843 阅读 · 0 评论 -
计算最少操作次数。。。
#include #include using namespace std;int get1Count(unsigned int val){ int count = 0; for(int i=0; i>= 1; if(val == 0) break; } return count;}int func(unsigned int value){ int cou原创 2010-08-01 01:25:00 · 1616 阅读 · 0 评论 -
判断一个数是不是2的n次幂...
<br />判断一个数是不是2的n次幂。<br />设要判断的数是无符号整数X。 首先判断X是否为0,如果为0则不是2的n次幂,返回。X和X-1进行按位与操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2 的n次幂。证明:如果是2的n次幂,则此数用二进制表示时只有一位是1,其它都是0。减1后,此位变成0,后面的位变成1,所以按位与后结果是0。如果不是2的n次幂,则此数用二进制表示时有多位是1。减1后,只有最后一个1变成0,前面的 1还是1,所以按位与后结果不是转载 2010-08-01 10:24:00 · 3774 阅读 · 0 评论 -
判断数组中是否包含重复数字
给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同。时间复杂度为O(nlogn),空间复杂度为O(1)。方法2.使用bitmap方法。定义长度为N/8的char数组,每个bit表示对应数字是否出现过。遍历数组,使用 bitmap对数字是否出现进行统计。时间复杂度为O(n),空间复杂度为O(n)。方法3.遍历数组,假设第 i 个位置的数字为 j ,则通过交换将 j 换到下标为 j 的位置上。直到转载 2010-08-01 10:35:00 · 8180 阅读 · 4 评论 -
数组中是否有两个数的和为10...
给定一个数组,问其中是否有两个数的和为10?原文的思路:1.比较任意两个数的和是否为10。如for (int i = 0; i 复杂度为O(n*n)。 2.将数组排序后,对每个数m,使用二分查找在数组中寻找10-m。复杂度为O(nlogn)。 3.将数组存储到hash_set中去,对每个数m,在hash_set中寻找10-m。复杂度为O(n)。 4.如果数组很大,超过内存的容量,可以按照hash(max(m, 10-m))%g,将数据分到g个小的group中。然后对每个小的group进行单独处理。复杂度为O原创 2010-08-01 11:30:00 · 2200 阅读 · 0 评论 -
1的阶乘到100的阶乘相加的和,末位数是几?
<br />1!= 1 <br />2!= 2 <br />3!= 6 <br />4!= 24 <br />5! = 120 <br />6! = 720 <br />... 从5开始,末位数字都是0,所以末尾数字是 1+2+6+24 = 33; <br /><br />末尾数是3<br /> <br />原文链接:http://hi.baidu.com/%C2%B7%C4%CF%C6%BD/blog/item/11e542096e4ce0a62eddd4ea.html转载 2010-08-01 11:48:00 · 9867 阅读 · 0 评论 -
删除所有ascii编码的字符和数字...
<br />已知一个字串由GBK汉字和ascii编码的数字和字母混合组成,编写c语言函数实现从中去掉所有ascii编码的字母和数字(包括大小写),要求在原字符串上返回结果。<br />注:函数接口为:int filter_ascii(char* gbk);汉字的GBK编码范围是0x8140-0xFEFE。<br /> <br />#include <cstdlib>#include <iostream>using namespace std;char* filter_ascii(char*原创 2010-08-01 15:16:00 · 2277 阅读 · 0 评论 -
找出给定字符串对应的序号...
<br />序列Seq=[a,b,…z,aa,ab…az,ba,bb,…bz,…,za,zb,…zz,aaa,…] 类似与excel的排列,任意给出一个字符串s=[a-z]+(由a-z字符组成的任意长度字符串),请问s是序列Seq的第几个。<br /> <br />注意到每满26个就会向前进一位,类似一个26进制的问题。<br />比如ab,则位置为26*1 + 2;<br />比如za,则位置为26*26 + 1;<br />比如abc,则位置为26*26*1 + 26*2 + 3;<br /> <br转载 2010-08-01 15:35:00 · 1609 阅读 · 0 评论 -
统计论坛在线人数分布...
<br />求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。<br /> <br />思路:<br />一天总共有 3600*24 = 86400秒。<br />定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。<br />然后依次读入每个用户的登录时间和退出时间,将与登录时间对应转载 2010-08-01 16:16:00 · 1133 阅读 · 0 评论 -
找出被修改过的数字
<br />n个空间(其中n<1M),存放a到a+n-1的数,位置随机且数字不重复,a为正且未知。现在第一个空间的数被误设置为-1。已经知道被修改的数不是最小的。请找出被修改的数字是多少。<br />例如:n=6,a=2,原始的串为5, 3, 7, 6, 2, 4。现在被别人修改为-1, 3, 7, 6, 2, 4。现在希望找到5。思路:由于修改的数不是最小的,所以遍历第二个空间到最后一个空间可以得到a的值。<br />a 到 a+n-1这 n个数的和是 total = na + (n - 1)n/2。<b转载 2010-08-01 16:57:00 · 1021 阅读 · 0 评论 -
如何拷贝特殊链表
<br />有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?<br /> <br />思路:<br />拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。<br />假设原来链表为A1 -> A2 ->... -> An,新拷贝链表是B1 -> B2 ->...-> Bn。<br />为了能够快速的找到pRand指向的节点,并把对应的关系拷贝到B中。我们可以将两个链表合并成<br />A1 -> B1 -转载 2010-08-01 17:17:00 · 1080 阅读 · 0 评论 -
用两个栈实现一个队列的功能...
<br />定义两个栈A, B, 初始为空...<br /> <br />入队:直接push进栈A;<br /> <br />出队:首先判断栈B是否为空, 不空的话pop出栈头元素, 否则将栈A的所有元素pop出来并且push进栈B中, 然后再pop出栈B的栈头元素...原创 2010-09-30 17:13:00 · 1023 阅读 · 0 评论