随笔分类 -  常见面试题

1 2 3 下一页
排序算法小结
摘要:转自:http://blog.csdn.net/caryaliu/article/details/8280647从以下几个方面来比较排序算法:1. 算法的时间和空间复杂度2. 排序的稳定性3. 算法结构的复杂度4. 参加排序的数据规模排序的稳定性:稳定排序方法: 插入排序、冒泡排序、二路归并排序、基数排序是稳定排序算法;不稳定排序方法: 选择排序、谢尔排序、快速排序、堆积排序是不稳定排序算法。算法复杂度比较:各种内排序算法的时间、空间复杂度排序方法平均时间最坏情况辅助空间插入排序O(n*n)O(n*n)O(1)谢尔排序O(n*log2n)O(n*log2n)O(1)泡排序O(n*n)O(n*n 阅读全文
posted @ 2014-04-06 17:11 猿人谷 阅读(2383) 评论(0) 推荐(0) 编辑
已知ip地址和其子网掩码如何求网络号子网号主机号
摘要:已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号、子网号和主机号。要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换为2进制,windows的计算器科学型能帮你计算。是11100000,借了三位 借了三位,子网个数为2的三次方等于8 即八个子网 其实书上说得挺复杂,我感觉,计算网络号最简单的方法就是 256(这是个固定的数字)除以8(子网个数),等于32 那么,八个子网号就分别是 10.130.89.0 10.130.89.32 10.130.89.64 10.130.89.96 10.130.89.128 10 阅读全文
posted @ 2014-04-04 09:27 猿人谷 阅读(33432) 评论(1) 推荐(1) 编辑
memcpy的函数
摘要:网新恒天2014校园招聘笔试编程题已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。说明:1.source和destin所指的内存区域可以重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前被覆盖。而使用memmove可以用来处理重叠区域。函数返 阅读全文
posted @ 2013-10-29 14:44 猿人谷 阅读(8861) 评论(0) 推荐(2) 编辑
对称字符串的最大长度
摘要:题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。思路:可能很多人写过判断一个字符串是不是对称函数,这个题目可以看成是该函数的加强版。首先想到的就是遍历,暂且先不考虑效率问题。判断一个字符串是不是对称的函数,可以用这个字函数逐一检查原字符串中所有的子字符串,然后输出长度最大的即可。怎样判断一个字符串是不是对称的字符串?-->可以用两个指针分别指向字符串的第一个字符和最后一个字符,判断是否相等,如果不相等直接返回false,如果为真则接着比较下 一对字符。如何遍历原字符串的所有字串?首先 阅读全文
posted @ 2013-10-24 20:02 猿人谷 阅读(1550) 评论(0) 推荐(0) 编辑
最长回文字符串
摘要:回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。比如输入字符串 "google”,由于该字符串里最长的对称子字符串是 "goog”,因此输出4。1.问题解决的基本方法分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那该字符串肯定不是对称的。否则我们接着判断里面的两个字符是不是相等,以此类推。#includeusing namespac 阅读全文
posted @ 2013-10-24 20:00 猿人谷 阅读(35667) 评论(0) 推荐(4) 编辑
TCP第三次握手失败怎么办
摘要:最新文章可以参看:https://yuanrengu.com/2020/77eef79f.html 笔试题中经常会遇到这个问题:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。 在此 阅读全文
posted @ 2013-10-24 16:55 猿人谷 阅读(16429) 评论(5) 推荐(2) 编辑
100阶乘末尾有多少个零
摘要:题目:1*2*3*……*100 求结果末尾有多少个零分析:一般类似的题目都会蕴含某种规律或简便方法的,阶乘末尾一个零表示一个进位,则相当于乘以10而10 是由2*5所得,在1~100当中,可以产生10的有:0 2 4 5 6 8 结尾的数字,显然2是足够的,因为4、6、8当中都含有因子2,所以都可看当是2,那么关键在于5的数量了那么该问题的实质是要求出1~100含有多少个5由特殊推广到一般的论证过程可得: 1、 每隔5个,会产生一个0,比如 5, 10 ,15,20.。。 2 、每隔 5×5 个会多产生出一个0,比如 25,50,75,100 3 、每隔 5×5× 阅读全文
posted @ 2013-10-24 16:15 猿人谷 阅读(10246) 评论(0) 推荐(3) 编辑
寻找和为定值的两个数
摘要:题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。解析:如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--,逐次判断 a[i]+a[j]?=sum,如果某一刻a[i]+a[j]>sum,则要想办法让sum的值减小,所以此刻i不动,j--,如果某一刻 a[i]+a[j] behind) { long l... 阅读全文
posted @ 2013-10-24 14:31 猿人谷 阅读(1452) 评论(0) 推荐(0) 编辑
判断单链表是否存在环
摘要:周末参加完美世界校园招聘中就有一道判断单链表是否有环的编程题。写一个C/C++函数,来判断一个单链表是否具有环,如果存在环,则给出环的入口点。有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。现在需要解决的问题有以下两个:如何判断一个链表是不是这类链表?如果链表为存在环,如果找到环的入口点?判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则 阅读全文
posted @ 2013-10-21 14:11 猿人谷 阅读(687) 评论(0) 推荐(0) 编辑
删除链表中的重复元素
摘要:昨晚在参加兰亭集势的笔试时,看到了这样一个题目。大致意思就是给出一个单链表,链表中有重复的元素,需要删除重复的元素。如:1→2→3→5→4→3→7,删除重复元素后变成1→2→3→5→4→7。思路其实还蛮简单:建立三个工作指针p,q,r,然后p遍历全表。p每到一个结点,q就从这个结点往后遍历,并与p的数值比较,相同的话就free掉那个结点。LinkList RemoveDupNode(LinkList L) //删除重复结点的算法{ LinkList p , q , r; p = L -> next; while(p) //p用于遍历链表 { q = p; while(q->next 阅读全文
posted @ 2013-10-18 09:28 猿人谷 阅读(1322) 评论(0) 推荐(0) 编辑
删掉重复的数据
摘要:一)过滤重复的数据。即把原来重复的数据过滤,只保留一份。例如:inta[]={1,3,4,3,2,5,2};输出:13 4 25①实现方法一(采用STL):[cpp] view plaincopy#include#include#includeusingnamespacestd;voidDedup(FILE*infile,FILE*outfile){intiTemp;unsignedintnCount=0;typedefsetIntSet;IntSetiArray;while(NULL==feof(infile)){fscanf(infile,"%d",&iTemp 阅读全文
posted @ 2013-10-13 17:14 猿人谷 阅读(699) 评论(0) 推荐(0) 编辑
寻找数组中第二大或第二小的数值
摘要:昨天晚上参加了360校园招聘的笔试,其中最后一道笔试题就是找数组中的第二大的数。可以看出今年360笔试的试题还是不难的,想起昨晚提前把试题做完后,提前把试卷给交了,就和旁边的北大的一哥们聊天,聊最近的各种笔试、面试以及被鄙视。快到公交站时,还讨论着明天的腾讯、百度,以及晚上的去哪儿网的笔试。找工作还确实是个体力活啊!到处赶场。2013年360校园招聘题:写一个函数找出一个整数数组中,第二大的数。从一个给定的、无序的数组中,找出第二大或者第二小的数值。#include int FindSecondBiggest(int *v, int len){ if (v == NULL || len ma. 阅读全文
posted @ 2013-10-13 16:51 猿人谷 阅读(5812) 评论(11) 推荐(0) 编辑
根据前序和中序推出后序
摘要:最近面试总遇到这种根据给出的两类序遍历,然后求按另一种形式序的遍历。看来有必要好好总结下这个知识点,省的每次笔试时都得花不少时间推导。首先,我们看看前序、中序、后序遍历的特性:前序遍历:(根—>左—>右) 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树中序遍历:(左—>根—>右) 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树后序遍历:(左—>右—>根) 1.后序遍历左子树 2.后序遍历右子树 3.访问根节点三序中知道其中两个就可以推出第三个,但前提是我们必须知道中序(这里是针对二叉树的,不包括二叉搜索树).因为:先序和后序给我们提供的信息是 阅读全文
posted @ 2013-10-13 10:36 猿人谷 阅读(985) 评论(5) 推荐(0) 编辑
树的子结构
摘要:面试题目:输入两颗二叉树A,B,判断B是不是A的子结构;#include #include using namespace std;typedef struct BinaryTreeNode{ int value; BinaryTreeNode * lchild; BinaryTreeNode *rchild;}BinaryTreeNode;typedef BinaryTreeNode * BiTree;void CreateBiTreeByLevel(BiTree &t,int Array[],int i,int len){ if(Array[i]==0||i > len) r 阅读全文
posted @ 2013-10-10 16:28 猿人谷 阅读(357) 评论(0) 推荐(0) 编辑
出栈顺序
摘要:之前参加过华北计算机研究所和优酷土豆的笔试,都考到出栈顺序,之前数据结构学的不到位,遇到这类题时,还着实把我愣了一会,现在总结下,省得以后再遇到这类问题,也希望能给遇到同样问题的兄弟们一个参考。 废话不多说,直接上个例题。一个栈的入栈序列是a,b,c,d,e则栈的不可能的输出序列是:()A edcbd B decba C dceab D abcde 栈之根本——后进先出(Last In First Out , LIFO)初次接触到这个问题的人,或许会认为入栈abcde,所以出栈只能是edcba所以BCD都不对。 其实是这个问题描述有... 阅读全文
posted @ 2013-10-09 20:17 猿人谷 阅读(22550) 评论(1) 推荐(3) 编辑
四则运算表达式
摘要:四则运算表达式 一种不需要括号的后缀表达法,我们把它称为逆波兰(Reverse Polish Notation , RPN)表示。它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式,解决了四则运算中括号改变运算符优先级的问题。 我们先来看看,对于"9+(3-1)×3+10÷2",如果要用后缀表示法应该是什么样子:“9 3 1 - 3 * + 10 2 / +” ,这样的表达式称为后缀表达式,叫后缀的原因在于所有的符号都是在要运算数字的后面出现。一.后缀表达式计算结果 为了解释后缀表达式的好处,我们先来看看,计算机如何应用后缀表达式计算出最终的结果 阅读全文
posted @ 2013-10-09 16:59 猿人谷 阅读(3167) 评论(2) 推荐(4) 编辑
替换空格
摘要:题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。 看到这个题目,我们首先应该想到的是原来一个空格字符,替换之后变成'%'、'2'和'0'这3个字符,因此字符串会变长。如果是在原来的字符串上做替换,那么就有可能覆盖修改在该字符串后面的内存。如果是创建新的字符串并在新的字符串上做替换,那么我们可以自己分配足够多的内存。 在这里介绍一种时间复杂度为O(n)的解法。 我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串 阅读全文
posted @ 2013-09-12 14:58 猿人谷 阅读(2701) 评论(7) 推荐(2) 编辑
位运算
摘要:以后慢慢启用个人博客:http://www.yuanrengu.com 位运算 位运算是把数字用二进制表示之后,对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话,说世界上有1 阅读全文
posted @ 2013-09-09 22:36 猿人谷 阅读(4908) 评论(2) 推荐(4) 编辑
数据结构常见笔试题
摘要:反转一个无符号整数的比特位.Reverse the bits of an unsigned integer.For example, x is 0x00001234, then reverse(x) is 0x2C480000.static uint Reverse(uint x){ uint y = 0; for (int i = 0; i >= 1; } return y;}删除数组中的重复元素void remove_duplicate(int *a, int len){ int i = 0; int j = 0; for (j = 0; j 0 && key > 阅读全文
posted @ 2013-09-09 16:27 猿人谷 阅读(1551) 评论(0) 推荐(0) 编辑
在O(1)时间删除链表结点
摘要:题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。函数的声明如下:void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted);分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,更重要的是,还能考察我们对时间复杂度的理解。注意函数的第一个参数pListHead是一个指向指针的指针。例如,当我们往一个空链表中插入一个结点时,新插入的结点就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针,否则出了这个函数pHead仍然是一个空指针。在链表中删除一 阅读全文
posted @ 2013-09-09 11:48 猿人谷 阅读(784) 评论(0) 推荐(0) 编辑

1 2 3 下一页