随笔分类 -  笔试面试题集锦

腾讯校招题:fork进程与缓存
摘要:题目描述:请问下面的两个程序各一共输出多少个“-”?#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){ int i; for(i=0; i<2; i++) { fork(); printf("-"); } return 0;}#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){ int i; for(i=0 阅读全文

posted @ 2012-09-26 14:15 as_ 阅读(2817) 评论(0) 推荐(4) 编辑

最小排列数
摘要:题目描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。解析:对数组进行排序,排序规则:当两个数进行比较时,现将他们转坏为char数组,然后用两个char指针挨个字符进行比较,当其中一个为正常字符,而另一个为‘\0’,则后者指针回溯第一个字符,直到找到第一个不相同的字符,字符大者的对应数为大,或者当两者指针对应字符皆为‘\0’时,此时证明两个数字”相等“。具体实现,见下面参考代码:参考代码:#include <iostream>#includ 阅读全文

posted @ 2012-09-23 15:54 as_ 阅读(1614) 评论(0) 推荐(0) 编辑

字符全排列
摘要:题目描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。解析:递归法:首先看最后两个字符b, c。 它们的全排列为b c和c b, 即以b开头的c的全排列和以c开头的b的全排列。再看三个字符a,b,c。他们的全排列(a,b,c)、(a,c,b)、(b,a,c)、(b,c,a)、(c,a,b)、(c,b,a)从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。因此perm(p) = r1perm(p1), 阅读全文

posted @ 2012-09-20 15:43 as_ 阅读(1132) 评论(0) 推荐(0) 编辑

时间复杂度O(n),空间复杂度O(1)的排序
摘要:题目描述:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)解析:利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,然后遍历n个数,假设这n个数在数组array[0...n-1]中,则i取值从0到n-1同时执行a[array[i]]++,最后再依照顺序读数组a,遇到不为0时,将对应的下标读回数组array,计数是几次就读几次,覆盖原有数,这样得出的array即为排序所求因为空间复杂度大小已知,为65536,执行循环次数约为n+65536 ,所以其空间复杂度为O(n),空间复杂度O(1),代码略 阅读全文

posted @ 2012-09-20 10:09 as_ 阅读(4459) 评论(0) 推荐(0) 编辑

在移位数组中查找数
摘要:题目描述:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。解析:很多解法的时间复杂度都停留在O(n),下面的解法 仍为二分查找法 只不过 对应题目做了相应的改进 时间复杂度为O(log2n)1.思路:(画图实际上更直观看出来思路,读者试着自己画出图来对应分析)设数组a[start]~a[end],mid = (start + end) / 2 在进行二叉查找时,待查找数肯定会在变量mid的两侧,其中mid的取值主要有以下几情况,第一种为a[mid] < a[start] 说明此时mid对应的数 阅读全文

posted @ 2012-09-19 16:13 as_ 阅读(934) 评论(0) 推荐(0) 编辑

和为n连续正数序列
摘要:题目描述:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。分析:来源于互联网 以下仅给出思路解法一:两个for循环解决,复杂度O(n2)解法二:因为整数序列有序,可以设立两个游标satrt,end,通过判区间[start,end]的和是否为n来得到这个序列。如果区间和大于n,start往前移动,如果小于n,end往前移动,等于就输出这个区间。时间复杂度是0(n).解法三:假设start + (start + 1) + ... +end = n 是一个答案,则根据求和公式就是 (start + 阅读全文

posted @ 2012-09-19 13:19 as_ 阅读(1140) 评论(0) 推荐(0) 编辑

笔面集锦:判断单链表里面是否有环及相关扩展题
摘要:源于网络1.如何判断单链表里面是否有环?设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsLoop(slist *head){ slist *slow = head, *fast = head; while ( fast && fast->next ) { slow = slow->next; fast = fast->next->ne... 阅读全文

posted @ 2012-07-22 18:51 as_ 阅读(939) 评论(0) 推荐(0) 编辑

找出出现了奇数次的数
只有注册用户登录后才能阅读该文。

posted @ 2012-07-20 19:15 as_ 阅读(55) 评论(0) 推荐(0) 编辑

找出二叉树中两个节点的最低共同父节点
摘要:算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点C伪码实现:List *h,*h1,*h2;bool find1=false,find2=false;void postVisit(BTNode *root){ if(root!=null) { add(root,h); //将root结点加入以h为表头的链表中 postVisit(root->lchild); if(root->lchild!=NULL)... 阅读全文

posted @ 2012-07-20 10:31 as_ 阅读(2214) 评论(0) 推荐(0) 编辑

百度2010校招算法题之最大数字串
摘要:代码编写完成函数: int maxnumstr(char *inputstr, char *outputstr) 函数功能:找出inputstr中的最长连续数字串存储到outputstr里并返回长度,如调用maxnumstr("123abc1234a", outputstr)后返回4且outputstr中为"1234"。代码实现:(未验证正确性)int maxnumstr(char *inputstr, char *outputstr){ int i,j,count,max=-1; char *p,*pmax; for(i=0;inputstr[i]!= 阅读全文

posted @ 2012-07-18 13:33 as_ 阅读(1340) 评论(0) 推荐(1) 编辑

百度2010校招算法题之编译模块
摘要:算法设计某大型项目由n个组件N1, N2……Nn构成,每个组件都可以独立编译,但是某些组件的编译依赖于其它组件(即某些组件只能在其它组件编译完成后才能编译),设计算法给出统计过程。思路:拓扑排序算法语言伪代码:(1)初始化栈S(2)找出所有可执行的组件w,w进栈(3)while(栈S非空) v=栈顶元素出栈; if(v未被编译) 编译v,并且输出v; foreach(更新与v相关的组件依赖参数) if(x=组件可被编译) x进栈;C伪码:void compileModel... 阅读全文

posted @ 2012-07-18 13:07 as_ 阅读(1405) 评论(0) 推荐(1) 编辑

百度2011校招笔试算法题二
摘要:2、二重哥德巴赫猜想每个不小于6的偶数都可以表示为两个素数之和编写一个函数,输出6-100000内所有偶数可以表示为哪两个素数之和,如果一个偶素有多种表示方式,输出任意一种即可。代码实现(仅供参考):int ispri(int num){ for(int k=2;k<=num/2;k++) { if(!num%k) return 0; } return 1;}void judge(int number){ for(int j=1;j<number;j++) { if(ispri(j)) { ... 阅读全文

posted @ 2012-07-16 17:59 as_ 阅读(1240) 评论(0) 推荐(0) 编辑

百度2011校招笔试算法题一
摘要:1.问题描述有一个单入口,单出口的有向无环图。给出一个算法,在已有结点之间插入若干结点,使得从入口结点到出口结点经过的任意路径长度一致,详细描述你的算法思路,并分析其时间复杂度和空间复杂度。2.算法思路首先深度遍历,计算出入口到出口的最长路径,然后重新深度遍历,遍历到出口节点之前计算此路径长度,如果计算出小于最长路径则插入节点,使这个路径等于最长路径。3.算法实现:(仅供参考)struct Edge{ VPoint *dest; Edge *next;}struct VPoint{ int id; int weight; Edge *adj;}int longe... 阅读全文

posted @ 2012-07-16 17:48 as_ 阅读(1409) 评论(0) 推荐(0) 编辑

百度2012校招笔试题之位数和编码
摘要:算法设计给定一个数字编码N,大多数情况下可以找到一个数字编码M,其位数与编码N相等(编码可以从0开始),各位数字之和与编码N中各位数字之和相等,并且M是数值大于N的所有码中最小的一个,也可能要找的编码M不存在。如给定编码N=134,则编码M=143;给定编码N=020,则编码M=101,形式化表述为f(N)=M,如果M不存在,则f(N)=-1。现在给定一个起始编码N, N的数字位数最大不超过1000,N 的数值最大不超过10^500,要求给出序列S(N),其中S(0)=N,S(1)=f(N),S(2)=f(S(1)),S(3)=f(S(2))...,当S(i+1)<0时序列结束,但小于0 阅读全文

posted @ 2012-07-13 13:45 as_ 阅读(1045) 评论(1) 推荐(0) 编辑

百度2012校招笔试题之全排列与组合
摘要:算法题目:求一个全排列函数:如p([1,2,3])输出:[123],[132],[213],[231],[321],[323].思路:采用字典序的排序的方法代码实现:void swap(char *a,char *b){ char temp; temp=*a; *a=*b; *b=temp;}void reverse(char *dic ,int start,int end){ int i=start,j=end; for(;i<=j;i++,j--) swap(dic[i],dic[j]);}void perm (char *... 阅读全文

posted @ 2012-07-13 10:21 as_ 阅读(1417) 评论(0) 推荐(0) 编辑

百度2012校招笔试题之线段最大重复
摘要:题目算法设计一个一维数轴上有不同的线段,求重复最长的两个线段。例: a: 1~3b: 2~7c: 2~8最长重复是b和c算法设计(伪代码 仅供参考)typedef struct{ char id; int start; //如果无序 可以先按照start从小到大排序 int end;}Span;char reid1,reid2;void maxspan(Span *sp,int size) //线段有序{ int i,j,maxspan=-1; char id1,id2,tempmin; for(i=0;i<si... 阅读全文

posted @ 2012-07-12 16:13 as_ 阅读(965) 评论(0) 推荐(0) 编辑

导航