经典面试题目讲解
zhanglvmeng
这个作者很懒,什么都没留下…
展开
-
程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入: 8 / \ 6 10 /\ /\5 7 9 11输出: 8 / \ 10 6 /\ /\11 9 7转载 2013-08-12 22:10:45 · 292 阅读 · 0 评论 -
程序员面试题精选100题(55)-不用+、-、×、÷做加法[算法]
题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是问题总是要解决的,只能打开思路去思考各种可能性。首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+转载 2013-08-16 11:03:29 · 341 阅读 · 0 评论 -
程序员面试题精选100题(61)-数对之差的最大值[算法]
最后一种方法,牛!本文转自:http://zhedahht.blog.163.com/blog/static/2541117420116135376632/题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分析:看到这个题目,很多人的第一反应是找转载 2013-08-16 14:28:53 · 353 阅读 · 0 评论 -
程序员面试题精选100题(51)-顺时针打印矩阵[算法]
标注:此题目需要考虑一下几点:1)矩阵为空的情况2)执行第二步: startY 3)执行第三步:startX 4)执行第四步:startX 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6转载 2013-08-16 10:41:47 · 334 阅读 · 0 评论 -
程序员面试题精选100题(50)-树的子结构[数据结构]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174201011445550396/题目:二叉树的结点定义如下:struct TreeNode{ int m_nValue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入两棵二转载 2013-08-16 09:53:10 · 358 阅读 · 0 评论 -
程序员面试题精选100题(49)-复杂链表的复制[算法]
个人推崇第二种用hash表的方法本文转自:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/ 题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下: struct C转载 2013-08-15 17:25:46 · 337 阅读 · 0 评论 -
程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构] 【新建路径】
本文转自:http://zhedahht.blog.163.com/blog/static/25411174201081263815813/题目:二叉树的结点定义如下:struct TreeNode{ int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入二叉树中的两个结点,输出这两个结点在转载 2013-08-15 16:20:56 · 383 阅读 · 0 评论 -
程序员面试题精选100题(44)-数值的整数次方[算法]
第三种方法性能较好,且比较容易理解。本文转自:http://zhedahht.blog.163.com/blog/static/254111742009101563242535/题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒转载 2013-08-15 15:06:06 · 376 阅读 · 0 评论 -
程序员面试题精选100题(41)-把数组排成最小的数[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200952174133707/备注:qsort,strcpy,strcmp,strcat都是调用的C++里面固定的函数。(zp)题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字转载 2013-08-15 11:26:41 · 388 阅读 · 0 评论 -
程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]
本文转自:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符转载 2013-08-14 21:25:14 · 354 阅读 · 0 评论 -
程序员面试题精选100题(34)-数组中只出现一次的数字[算法]【还需再研究】
转自: http://blog.csdn.net/hackbuteer1/article/details/6889217有N+2个数,N个数出现了偶数次,2个数出现了奇数次(这两个数不相等),问用O(1)的空间复杂度,找出这两个数,不需要知道具体位置,只需要知道这两个值。 求解:【任何一个数字异或它自己都等于0,而0与任何数字求异或,都为原数字!】如果只有一个数出现过奇转载 2013-08-14 20:14:22 · 285 阅读 · 0 评论 -
程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
本文转自:http://zhedahht.blog.163.com/blog/static/25411174201085114733349/题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑转载 2013-08-15 15:42:08 · 324 阅读 · 0 评论 -
程序员面试题精选100题(60)-判断二叉树是不是平衡[数据结构] 【后序遍历,避免重复计算】
题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:在本系列博客的第27题,我们曾介绍过如何求二叉树的深度。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果转载 2013-08-16 13:47:48 · 428 阅读 · 0 评论 -
程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
本文转自 http://zhedahht.blog.163.com/blog/static/25411174200712895228171/题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。分析:这是去年google的一道面试题。我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有转载 2013-08-12 00:43:13 · 356 阅读 · 0 评论 -
程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
题目:定义Fibonacci数列如下: / 0 n=0f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。因转载 2013-08-13 10:29:30 · 266 阅读 · 0 评论 -
程序员面试题精选100题(17)-把字符串转换成整数[算法] 【细节决定成败】
本文转自:http://zhedahht.blog.163.com/blog/static/25411174200731139971/ 题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思转载 2013-08-13 11:08:47 · 381 阅读 · 0 评论 -
程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法] 【约瑟夫环问题,经典】
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420072250322938/题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。分析转载 2013-08-13 09:47:07 · 438 阅读 · 0 评论 -
程序员面试题精选100题(13)-第一个只出现一次的字符[算法]
本文转自:http://zhedahht.blog.163.com/blog/static/25411174200722191722430/【文中作者介绍的带有hash的方法时间复杂度是O(N^2):最坏循环两次。空间复杂度O(1)hash 至少一遍,找也是一遍。而且还有散列算法也要复杂度。】题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b转载 2013-08-13 00:16:17 · 395 阅读 · 0 评论 -
程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法] 【充分利用数组的特点】
本文转自:http://zhedahht.blog.163.com/blog/static/2541117420072143251809/题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此转载 2013-08-12 21:41:48 · 337 阅读 · 0 评论 -
程序员面试题精选100题(57)-O(n)时间的排序[算法] 【计数排序的思想】
题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速排序等等。这些排序的算法,要么是O(n2)的,要么是O(nlogn)的。可是这道题竟然要求是O(n)的,这里面到底有什么玄机呢? 题目特别强调是转载 2013-08-16 11:07:14 · 352 阅读 · 0 评论 -
程序员面试题精选100题(07)-翻转句子中单词的顺序[算法]
本文转自:http://zhedahht.blog.163.com/blog/static/254111742007289205219/题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够转载 2013-08-12 17:51:15 · 256 阅读 · 0 评论 -
程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200725319627/题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \转载 2013-08-12 16:38:49 · 366 阅读 · 0 评论 -
程序员面试题精选100题(05)-查找最小的k个元素[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420072432136859/题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时原创 2013-08-12 13:57:19 · 349 阅读 · 0 评论 -
本算法实现了二元树的赋值问题 ++ 二元树中和为某一值的所有路径[数据结构]
本文转自 http://zhedahht.blog.163.com/blog/static/254111742007228357325/题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树转载 2013-08-12 11:27:11 · 352 阅读 · 0 评论 -
程序员面试题精选100题(03)-子数组的最大和[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/254111742007219147591/题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组转载 2013-08-12 10:36:07 · 322 阅读 · 0 评论 -
程序员面试题精选100题(46)-对称子字符串的最大长度[算法]
本文转自:http://zhedahht.blog.163.com/blog/static/25411174201063105120425/题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。引子:转载 2013-08-15 15:31:56 · 317 阅读 · 0 评论 -
程序员面试题精选100题(40)-扑克牌的顺子[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200951262930831/ 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。 分析一:这题目很有意思,是一个典型的寓教于乐的题目。转载 2013-08-15 10:01:33 · 364 阅读 · 0 评论 -
程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200732494452636/ 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。分析:这是一道广为流传的google面试题。用最直观的方法求解并不是很难,但转载 2013-08-14 12:11:01 · 298 阅读 · 0 评论 -
程序员面试题精选100题(24)-栈的push、pop序列[数据结构] 【借助辅助栈】
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200732102055385/题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个p转载 2013-08-14 09:49:38 · 373 阅读 · 0 评论 -
程序员面试题精选100题(23)-跳台阶问题[算法] 【雷同于斐波那契数列】
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200731844235261/题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。分析:这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。首先我们考虑最简单转载 2013-08-13 22:51:41 · 357 阅读 · 0 评论 -
程序员面试题精选100题(21)-左旋转字符串[算法] 【(XTYT)T=(YT)T(XT)T=YX】
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420073993725873/题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。分析:如果不考虑时间和转载 2013-08-13 21:46:52 · 422 阅读 · 0 评论 -
程序员面试题精选100题(20)-最长公共子序列[算法]【可参考博客内的后缀树】
本文转自: http://zhedahht.blog.163.com/blog/static/254111742007376431815/题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:转载 2013-08-13 16:10:08 · 506 阅读 · 0 评论 -
程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
note:方法一不是很严谨,没考虑负数的情况。 方法二flag一直左移,等移动32位之后会溢出了,此时flag为0,while结束。 方法三思路很灵活,但是不易想。===========================================================================================本文转自:转载 2013-08-13 22:07:02 · 339 阅读 · 0 评论 -
程序员面试题精选100题(18)-用两个栈实现队列[数据结构]
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420073293950662/题目:某队列的声明如下:templatetypename T> class CQueue{public: CQueue() {} ~CQueue() {} void appendTail(con转载 2013-08-13 13:07:38 · 346 阅读 · 0 评论 -
程序员面试题精选100题(19)-反转链表[数据结构]
本文转自:http://zhedahht.blog.163.com/blog/static/2541117420073471124487/题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道广为流转载 2013-08-13 13:45:50 · 533 阅读 · 0 评论 -
程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]【双指针的使用!!!】
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420072114478828/题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;转载 2013-08-12 21:12:34 · 376 阅读 · 0 评论 -
程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]
本文转自: http://zhedahht.blog.163.com/blog/static/2541117420072199173643/ 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入 8 / \ 6 10 /\ /\ 5 7 9 11输出8 6 10 5转载 2013-08-12 22:45:30 · 356 阅读 · 0 评论 -
二元树的赋值 ++ 二元树中和为某一值的所有路径[数据结构]
本文转自 http://zhedahht.blog.163.com/blog/static/254111742007228357325/题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树转载 2013-08-12 11:31:32 · 270 阅读 · 0 评论 -
程序员面试题精选100题(26)-和为n连续正数序列[算法]
本文转自: http://zhedahht.blog.163.com/blog/static/25411174200732711051101/题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。分析:这是网易的一道面试题。这道题和本面试题系列的第10题有些类似。我们用两个数转载 2013-08-14 14:10:03 · 300 阅读 · 0 评论 -
程序员面试题精选100题(28)-字符串的排列与组合[算法]
本文转自: http://blog.csdn.net/hackbuteer1/article/details/7462447全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。转载 2013-08-14 15:36:07 · 304 阅读 · 0 评论