微软、谷歌、百度等公司经典面试100题_2011
文章平均质量分 73
国境之南Fantasy
Coder
展开
-
给定一个函数rand5(),使函数rand7()可以随机等概率的生成1-7的整数
题目:给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。思路:很多人的第一反应是利用rand5() + rand()%3来实现rand7()函数,这个方法确实可以产生1-7之间的随机数,但是仔细想想可以发现数字生成的概率是不相等的。rand()%3转载 2012-08-31 12:13:00 · 3094 阅读 · 1 评论 -
Smith夫妇召开宴会,并邀请其他4对夫妇参加宴会。 求Mrs Smith握手的次数
Smith夫妇召开宴会,并邀请其他4对夫妇参加宴会。在宴会上,他们彼此握手,并且满足没有一个人同自己握手,没有两个人握手一次以上,并且夫妻之间不握手。然后Mr. Smith问其它客人握手的次数,每个人的答案是不一样的。求Mrs Smith握手的次数1.首先确定握手值的可能范围,最小为0,即是不和任何人握手,最大为8,即是10-2,减去的为不能和自己以及自己的转载 2012-09-11 17:18:28 · 5708 阅读 · 2 评论 -
序列化/反序列化二叉树
from: http://blog.csdn.net/ssjhust123/article/details/7777665题目设计一个算法能够实现序列化和反序列化一棵二叉树(注意,不是二叉搜索树BST)。这里的序列化指的是将一棵二叉树保存到文件中,反序列化就是从文件中读取二叉树结点值重构原来的二叉树。思路前一篇文章保存二叉搜索树到文件中 解决了转载 2012-09-28 23:41:09 · 1647 阅读 · 0 评论 -
两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1,B2。B1B2可以绕着A1点旋转。问在什么情况下,B1B2最长? 设两个圆的圆心分别为O1,O2。作O1C垂直于B1B
from; http://blog.csdn.net/iamzhaiwei/article/details/7685143网易游戏笔试题─两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1,B2。 B1B2可以绕着A1点旋转。问在什么情况下,B1B2最长两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1转载 2012-09-11 16:55:58 · 3227 阅读 · 0 评论 -
有6种不同颜色的球,分别记为1,2,3,4,5,6,每种球有无数个。现在取5个球,求在以下的条件下:
有6种不同颜色的球,分别记为1,2,3,4,5,6,每种球有无数个。现在取5个球,求在以下的条件下:1、5种不同颜色的球;2、4种不同颜色的球;3、3种不同颜色的球; 4、2种不同颜色的球;问题:1、5次分别是5种不同颜色的概率,2、取5次 4种不同颜色的概率,3、取5次 3种不同颜色的概率, 4、取5次2种不同颜色的概率,解答:既然每转载 2012-09-11 17:46:19 · 6256 阅读 · 0 评论 -
google面试题及我的算法(1)——交叉换位
from:http://blog.csdn.net/livelylittlefish/article/details/2102457来源:http://topic.csdn.net/u/20071228/16/cbc82a28-7288-411e-bf0f-caeec50756bf.html输入a_1, a_2, ..., a_n, b_1, b_2转载 2012-09-13 00:33:04 · 775 阅读 · 0 评论 -
整数的素数和分解问题
from: http://blog.csdn.net/alexingcool/article/details/6773442对于一个给定的整数,输出所有这种素数的和分解式,对于同构的分解只输出一次(比如5只有一个分解2+3,而3+2是2+3的同构分解式)。example:对于整数8,可以作为如下三种分解:(1) 8 = 2 + 2 + 2 + 2转载 2012-09-13 00:03:42 · 1295 阅读 · 0 评论 -
google面试题及我的算法(1)——交叉换位(完美版)
from : http://blog.csdn.net/livelylittlefish/article/details/2104007对“google面试题及我的算法(1)——改进”的再改进不需要移动,通过交换完成,只需一个交换空间例如,N=9时,第2步执行后,实际上中间位置的两边对称的4个元素基本配对,只需交换中间的两个元素即可,如下表所示。颜色表示每次要交换的转载 2012-09-13 00:36:08 · 893 阅读 · 0 评论 -
google面试题及我的算法(1)——交叉换位(改进)
from:http://blog.csdn.net/livelylittlefish/article/details/2102537对“一道google面试题及我的算法(1) ”(简称算法1)的改进交换次数变化对算法1还可以再改进。例如,N=9时,第2步执行后,实际上中间位置的两边对称的4个元素基本配对,只需交换中间的两个元素即可,如下表所示。颜色表示每次要交换的元素左转载 2012-09-13 00:35:02 · 835 阅读 · 0 评论 -
判断一个数的所有因数的个数是偶数还是奇数
如果一个数是平方数,因数是奇数个;如果不是平方数,因数是偶数个 比如24这个数,可以把因子配对(1,24),(2,12),(4,6)而对于36,因子配对(1,36),(2,18),(3,12),(4,9),(6,6),因为是平方数,有一组中的数重复了,所以因子数为奇数。转载 2012-10-07 15:06:31 · 6856 阅读 · 0 评论 -
用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出
一个单词如果交换其所含字母顺序,得到的单词称为兄弟单词,例如mary和army是兄弟单词,即所含字母是一样的,只是字母顺序不同,用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出。给出相应的数据结构及算法。要求时间和空间复杂度尽可能低目前思想:struct { char data; int n};根据数学定理:任何一个大于1的自然转载 2012-10-07 23:44:10 · 1562 阅读 · 0 评论 -
给定一个字符串的集合, 要求合并完成后的集合之间无交集。
给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。解法:为每个集合hash一个整数,如{aaa bbb ccc}对应1, {bbb ddd}对应原创 2012-09-20 00:26:39 · 2691 阅读 · 0 评论 -
系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行
1、系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行 (1)不考虑系统并行性,设计一个函数(Task *Ptask,int Task_num)不考虑并行度,最快的方法完成所有任务。 (2)考虑并行度,怎么设计 typedef struct{ int转载 2012-09-24 15:25:24 · 7122 阅读 · 0 评论 -
阿里巴巴面试算法题目:25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
from: http://blog.csdn.net/harbinzju/article/details/5838898将马分成A、B、C、D、E五组。第1-5次比赛:各组分别进行比赛,决出各组名次A1、A2、A3、A4、A5,B1、B2、B3、B4、B5,。。。。。。。。。。E4、E5。第6次比赛:A1、B1、C1、D1、E1,第一名是跑的最快的。转载 2012-09-26 14:28:35 · 21882 阅读 · 2 评论 -
阿里巴巴面试算法题目:有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间
from: http://blog.csdn.net/jwzbskywz/article/details/6995461题目:有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间用基于桶排序的方式。 注意到,最后只需要求间隔的最大值,所以任何间隔小于bar= (max - min)/(N-1) 的值都可以不计。 这样,首先求转载 2012-09-26 13:38:45 · 3304 阅读 · 0 评论 -
13个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?
from:http://zhidao.baidu.com/question/66024735.html13个球也是可以做的。就是分成4个、4个、5个,先拿两个四个上去,如果平衡,则问题出在5个那组,就在5个里任拿三个设为C1C2C3,再拿三个正常的,分别放两边,若平衡就简单啦,若不平衡,就出现C1C2C3重,或C1C2C3轻,相当于就知道那个特别的球是比较重或者比较轻啦,接转载 2012-09-25 11:16:02 · 2059 阅读 · 0 评论 -
经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
from: http://blog.csdn.net/sj13051180/article/details/67656031金币概率问题(威盛笔试题)题目:个房间里放着随机数量的金币。每个房间只能进入一次,并只能在一个房间中拿金币。一个人采取如下策略:前四个房间只看不拿。随后的房间只要看到比前四个房间都多的金币数,就拿。否则就拿最后一个房间的金币。编程计算这种策略拿到最转载 2012-09-10 00:37:03 · 2589 阅读 · 0 评论 -
经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
from: http://blog.csdn.net/sj13051180/article/details/67542281.判断单链表是否有环,要求空间尽量少(2011年MTK)如何找出环的连接点在哪里?如何知道环的长度? 很经典的题目。1.判断是否有环。使用两个指针。一个每次前进1,另一个每次前进2,且都从链表第一个元素开始。显然,如果有环,转载 2012-09-10 00:36:26 · 2199 阅读 · 0 评论 -
经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
from:http://blog.csdn.net/sj13051180/article/details/67273181. 有一个整数数组,请求出两两之差绝对值最小的值。记住,只要得出最小值即可,不需要求出是哪两个数。(Microsoft) 方法1:两两作差求绝对值,并取最小,O( n2 )。方法2:排序,相邻两点作差求绝对值,并取最小,转载 2012-09-10 00:34:41 · 2381 阅读 · 0 评论 -
判断一个自然数是否是某个数的平方。当然不能使用开方运算—谷歌
假设待判断的数字是 N。方法1:遍历从1到N的数字,求取平方并和N进行比较。如果平方小于N,则继续遍历;如果等于N,则成功退出;如果大于N,则失败退出。复杂度为O(n^0.5)。方法2:使用二分查找法,对1到N之间的数字进行判断。复杂度为O(log n)。方法3:由于(n+1)^2 =n^2 + 2n + 1,= ...= 1 + (转载 2012-08-31 00:42:48 · 3291 阅读 · 0 评论 -
求数组两两之差绝对值最小的值
一 题目描述: 有一个整数数组,请求出两两之差绝对值最小的值,只要求出最小值即可,不要求求出是哪两个数。 二 常规思路: 求解此题的寻常思路是什么?观察题目我注意到后面强调不要求求出两个数,那么最最简单的O(n^2)的算法显然做了很多无用功。嗯,好,既然这个办法不行想想其他的。对于数组也就是序列之类的题,有一种很常用的思路那就是预处理。这道题目貌似是可以的。转载 2012-08-21 15:36:13 · 1869 阅读 · 0 评论 -
有12个小球,外形相同,其中一个小球的质量与其他11个不同
给一个天平,问如何用3次把这个小球找出来,并且求出这个小球是比其他的轻还是重有12个球,其中有一个是假球,且与其它球的重量不同。用一个无法码天平称三次找出这个球,并确定比其它球重,或是轻。先把12只球编号为1、2、3、4、5、6、7、8、9、10、11、12。再比较(1、2、3、4)与(5、6、7、8)。转载 2012-09-06 00:22:24 · 9854 阅读 · 3 评论 -
找出二叉树上任意两个结点的最近共同父结点。
实际上,用树的后序遍历就可以了。当访问到所求的节点A时,如果这两个节点不在一条线上,则它们必定分别在A的左子树和右子树上,后序遍历到第一个满足这个条件的节点就是所要求的节点A。另外,还必须对这两个节点在一条线上的情况,做特殊处理。代码:static bool lca(Node *root, int va, int vb, Node *&result, Node* parrent转载 2012-08-27 20:30:57 · 1244 阅读 · 0 评论 -
找出数组中两个只出现一次的数字
转自:http://blog.csdn.net/ewanyou/archive/2011/05/25/6445209.aspxhttp://www.cnblogs.com/aLittleBitCool/archive/2011/04/14/2015720.html问题描述:一个数组中除了两个数字之外,其余数字均出现了两次(或偶数次)。请写出程序查找出这两个只出现一次的数字,要求时间转载 2012-09-06 23:57:24 · 1110 阅读 · 0 评论 -
10G整数文件中寻找中位数
from: http://hxraid.iteye.com/blog/649831题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值转载 2012-09-06 22:48:37 · 2048 阅读 · 0 评论 -
求两个字符串最长公共子串(LCS问题) 两种思想
from: http://bowen34.blog.163.com/blog/static/35417694201010193252713/(1)算法的基本思想:利用矩阵对角原理来实现当字符匹配的时候,不是简单的给相应元素赋上1,而是赋上其左上角元素的值加一。我们用两个标记变量来标记矩阵中值最大的元素的位置,在矩阵生成的过程中来判断当前生成的元素的值是不是最大的,据转载 2012-09-09 00:42:52 · 959 阅读 · 0 评论 -
雅虎面试题─将两个双向循环链表中data值相同的结点删除
有双向循环链表结点定义为:struct node{ int data; struct node *front,*next;};有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除。用两个向量A_vec、B_vec分别存储链表A、B的元素值,将A_vec、B_vec排序,用类似归并排序的方转载 2012-09-09 01:22:15 · 1788 阅读 · 0 评论 -
两个或N个字符串最大公共子串算法
from: http://blog.csdn.net/jianzhibeihang/article/details/4985276在版里看到有人问最大公共字串的问题,自己学习后在这里将总结发出来。最大公共字串分为两类,一类是我们大家所熟知的两个字符串的最大公共子串,另一个是我在搜索中发现的就是N个字符串的最大公共字串问题。首先来看两个字符串的最大公共字串问题。这里我列出了两种解法,转载 2012-09-09 00:29:31 · 1298 阅读 · 0 评论 -
把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
from:http://blog.csdn.net/laibinghua/article/details/5906539//十六进制的输出char* test3(long num) { char* buffer = (char*)malloc(11); buffer[0] = '0'; buffer[1] = 'x'; buffer[10] = '/0'转载 2012-09-08 22:07:00 · 1069 阅读 · 0 评论 -
求两个字符串的最长公共子串
from:http://blog.csdn.net/mjx20045912/article/details/6928934今天看到关于求两个字符串的最长公共子串的算法,写出来和大家分享一下。算法:求两个字符串的最长公共子串原理:1。 将连个字符串分别以行列组成一个矩阵。2。若该矩阵的节点对应的字符相同,则该节点值为1。3。当前字符相同节点的值 =转载 2012-09-09 00:41:59 · 855 阅读 · 0 评论 -
经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
from: http://blog.csdn.net/sj13051180/article/details/67336551.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1)、设计一个函数void generate(int a,int b,int N转载 2012-09-10 00:35:34 · 2270 阅读 · 0 评论 -
顺时针打印矩阵
from:http://blog.csdn.net/zhoujunbuaa/article/details/6121375题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, 2转载 2012-09-09 17:37:42 · 823 阅读 · 0 评论 -
求一个组合函数: 如p([1,2,3]) ,输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]。
求一个组合函数: 如p([1,2,3]) ,输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]。解答. 此题与背包问题相似,对于每个元素,有选择或者不选择两种情况,可穷举之。enum_array(int p[], int n){if(n return;print_stack //打印保存结原创 2012-09-26 17:55:13 · 1319 阅读 · 0 评论 -
用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
from:http://www.blogjava.net/chen45257211/articles/354718.html1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.基本思路: 2-1. 把问题归结为图结构的遍历问题。图遍历思想:实际上6个数字就是六个结点,转载 2012-09-10 00:12:19 · 1466 阅读 · 0 评论 -
查找两个已经排好序的数组的第k大的元素
from:http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k大的那个元素。分析这个题目,如果题目没有时间复杂度的要求,我们可以定义两个指针i,j分别指向a,b,如果a[i]j++,这个记录下走了多少转载 2012-10-29 22:23:01 · 1284 阅读 · 0 评论