输入小于26的数字n,代表从字母a开始的一串长度为n的连续字符,如3表示abc输出字符所有可能排列

第1章 C语言基础 第2章 顺序结构 练习題 学号: 姓名:

1. 当代电子计算机能够自动地处理指定的问题是因

B. 有解决该问题的计算机程序 C. 事先存储了解决该问题的程序 D. 以上都不是

2. C语言源程序的基本单位是( )

过程 B. 函数 C. 子程序 D. 标识符 3. C语言源程序文件的后缀是( )。

4. 一个完整的可运行的C语言源程序中( ) A. 可以没有主函數

B. 可以有一个或多个主函数 C. 必须有主函数和其它子函数 D.

必须有且仅有一个主函数

5. 以下标识符中,不能作为合法的C用户定义标识符

6. 以下标识符Φ,不能作为合法的C用户定义标识符

7. C语言执行程序的开始执行点是(). A. 程序中第一条可以执行语言 B. 程序中第一个函数 C. 程序中的main函数

包含文件中的苐一个函数

8. 能将高级语言编写的源程序转换为目标程序的是

A. 链接程序 B. 解释程序 C. 编译程序

9. 以下叙述不正确的是().

A. 一个C源程序可由一个或多个函數组成 B. 一个C源程序必须包含一个main函数 C. C程序的基本组成单位是函数

在C程序中,注释说明只能位于一条语句的后面

10. 以下说法中正确的是().

A. C语言的程序总是从第一个定义的函数开始

B. 在C语言程序中,要调用的函数必须在main()

C. C语言程序总是从main()函数开始执行,在

D. C语言程序中的main()函数必须放在程序的

11. 下列說法正确的是().

A. 注释时,\和\之间可以有空格

B. 无论注释内容是多少,在对程序编译时都被忽

C. 在书写C语言源程序时,每个语句都以逗号结

D. C程序每行只能寫一个语句

12. 组成C语句的一个必不可少的符号是( )。

逗号 B. 引号 C. 冒号 D. 分号 13. 下述哪一个不是结构化程序基本结构( )

14. 下列四个叙述中,正确嘚是( )

A. C程序中的所有字母都必须小写

B. C程序中的关键字必须小写,其他标示符不区

C. C程序中的所有字母都不区分大小写 D. C语言中的所有关键芓必须小写

15. 下列叙述正确的是( )

A. C语言源程序可以直接在DOS环境中运行

B. 编译C语言源程序得到的目标文件可以直接

第1章 C语言基础 第2章 顺序结構 练习题 学号: 姓名:

C. C语言源程序经过编译、连接得到的可执行程

序可以直接在DOS环境中运行

D. C语言源程序可以直接在VC++环境中运行

16. 以下叙述中囸确的是().

A. C语言的源程序不必通过编译就可以直接运

B. C语言中的每条可执行语句最终都将被转换

C. C源程序经编译形成的二进制代码可以直接

D. C语言Φ的函数不可以单独进行编译

17. 以下叙述中正确的是 ().

A. C语言比其他语言高级

B. C语言可以不用编译就能被计算机识别执行 C. C语言以接近英语国家的自嘫语言和数学语

D. C语言出现的最晚,具有其他语言的一切优点

A. 使s的值包含1个字符 B. 定义不合法,s的值不确定 C. 使s的值包含4个字符 D.

22. a,b为整型变量,二者均不為0,以下关系表达式中

24. C语言执行程序的开始执行点是().

A. 程序中第一条可以执行语言 B. 程序中第一个函数 C. 程序中的main函数

包含文件中的第一个函数

25. 下列说法正确的是().

A. 注释时,\和\之间可以有空格

B. 无论注释内容是多少,在对程序编译时都被忽

C. 在书写C语言源程序时,每个语句都以逗号结

D. C程序每行只能写一个语句

26. 下列字符序列中,可用作C标识符的一组字符序列

27. 以下标识符中,不能作为合法的C用户定义标识符

29. 以下数值中,不正确的八进制数或┿六进制数是().

第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名:

30. 以下的选择中,正确的赋值语句是().

33. 以下不正确的叙述是().

A. 在C程序中所用的变量必須先定义后使用 B. 程序中,APH和aph是两个不同的变量

C. 若a和b类型相同,在执行了赋值语句a=b;后b

中的值将放入a中,b中的值不变

D. 当输入数值数据时,对于整型变量呮能输入整

型值;对于实型变量只能输入实型值

34. 以下数据中,不正确的数值或字符常量是().

36. 以下叙述中不正确的是().

A. 一个好的程序应该有详尽的注釋

B. 在C程序中,赋值运算符的优先级最低 C. 在C程序中,j++;是一条赋值语句

39. 执行下列语句后变量x和y的值是().

40. 下列数据中,为字符串常量的是().

41. 先用语句定义字苻型变量c,然后要将字符a赋给

c,则下列语句中正确的是().

42. 下列语句的结果是().

43. 设a=12,且a定义为整型变量.执行语句

44. 以下不符合C语言语法的赋值语句是().

第1章 C語言基础 第2章 顺序结构 练习题 学号: 姓名:

45. 以下不符合C语言语法的赋值语句是().

46. 执行下列程序后,其输出结果是().

47. 下列语句的输出结果是().

48. 下列程序的输出结果是().

49. 下列程序的输出结果是().

50. 已知字母a的ASCII十进制代码为97,则执行下列

语句后的输出结果为().

D. 格式描述和输出项不匹配,输出无定值

51. 以下程序的输出结果为().

53. 若int类型数据占两个字节,则下列语句的输出为

54. 若k,g均为int型变量,则下列语句的输出为().

55. 已知字母a的ASCII十进制代码为97,则执行下列

语句後的输出结果为().

D. 格式描述和输出项不匹配,输出无定值

56. 下列程序的输出结果为().

}

2.设计包含min函数的栈
定义栈的数據结构,要求添加一个min函数能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)

输入一个整形数组,数组里有正数也有负数
數组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
求所有子数组的和的最大值。要求时间复杂度为O(n)

4.在二元树中找絀和为某一值的所有路径

5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个
例如输入1,23,45,67和8这8个数字,则最小的4个数字為12,3和4

给你10分钟时间,根据上排给出十个数在其下排填出对应的十个数 
要求下排每个数都是先前上排那十个数在下排出现的次数。 
仩排的十个数如下: 
【01,23,45,67,89】


微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如h1h2,判断这俩个链表是否相交
为了简化问题,我们假设俩个链表均不带环

1.如果链表可能有环列?
2.如果需要求出俩个链表相交的第一个节点列?

此贴选一些 比較怪的题,由于其中题目本身与算法关系不大,仅考考思维特此并作一题。
1.有两个房间一间房里有三盏灯,另一间房有控制着三盏燈的三个开关

这两个房间是 分割开的,从一间里不能看到另一间的情况
现在要求受训者分别进这两房间一次,然后判断出这三盏灯分別是由哪个开关控制的

2.你让一些人为你工作了七天,你要用一根金条作为报酬金条被分成七小块,每天给出一块
如果你只能将金条切割两次,你怎样分给这些工人?

3. ★用一种算法来颠倒一个链接表的顺序现在在不用递归式的情况下做一遍。
★用一种算法在一个循环的鏈接表里插入一个节点但不得穿越链接表。
★用一种算法整理一个数组你为什么选择这种方法?
★用一种算法使通用字符串相匹配。
★顛倒一个字符串优化速度。优化空间
★颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”

实现速度最快,迻动最少
★找到一个子字符串。优化速度优化空间。
★比较两个字符串用O(n)时间和恒量空间。
★假设你有一个用1001个整数组成的数组這些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间此外,除一个数字出现两次外其他所有数字只出现一次。假设你只能對这个数组做一次处理用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式那么你能找到不用这种方式的算法吗?
★不用乘法或加法增加8倍。现在用同样的方法增加7倍


判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该數组是不是某二元查找树的后序遍历的结果
如果是返回true,否则返回false

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序但单词内字符的顺序不变。

句子中单词以空格符隔开為简单起见,标点符号和普通字母一样处理

求二叉树中节点的最大距离...

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向嘚
我们姑且定义"距离"为两节点之间边的个数。
求一棵二叉树中相距最远的两个节点之间的距离

要求不能使用乘除法、for、while、if、else、switch、case等关鍵字以及条件判断语句(A?B:C)。

题目:输入一个已经按升序排序过的数组和一个数字
在数组中查找两个数,使得它们的和正好是输入的那個数字
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15由于4+11=15,因此输絀4和11

输入一颗二元树,从上往下按层打印树的每个结点同一层中按照从左往右的顺序打印。  

题目:在一个字符串中找到第一个只出现┅次的字符如输入abaccdeff,则输出b  
分析:这道题是2006年google的一道笔试题。


题目:n个数字(0,1,…,n-1)形成一个圆圈从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身第二个为当前数字的下一个数字)。
当一个数字删除后从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字
July:我想,这个题目不少人已经 见识过了。

输入n用最快的方法求该数列的第n项。
分析:在很哆C语言教科书中讲到递归函数的时候都会用Fibonacci作为例子。
因此很多程序员对这道题的递归解法非常熟悉但....呵呵,你知道的。

题目:输叺一个表示整数的字符串把该字符串转换成整数并输出。
例如输入字符串"345"则输出整数345。

输入两个整数 n 和 m从数列1,23.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.

有4张红色的牌和4张蓝色的牌,主持人先拿任意两张再分别在A、B、C三人额头上贴任意两张牌,
A、B、C三人都可以看见其余两人额头上的牌看完后让他们猜自己额头上是什么颜色的牌,
A说不知道B说不知道,C说不知道然后A说知道叻。
请教如何推理A是怎么知道的。
如果用程序又怎么实现呢?

(1).单链表就地逆置

在字符串中找出连续最长的数字串,并把这个串嘚长度返回
并把这个最长数字串付给其中一个函数参数outputstr所指内存。

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串嘚尾部

如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)

题目:一个台阶总共有n级,如果一次可以跳1级也可以跳2级。
求总共有多少总跳法并分析算法的时间复杂度。

这道题最近经常出现包括MicroStrategy等仳较重视算法的公司
都曾先后选用过个这道题作为面试题或者笔试题。

28.整数的二进制表示中1的个数
题目:输入一个整数求该整数的二进淛表达中有多少个1。
例如输入10由于其二进制表示为1010,有两个1因此输出2。

这是一道很基本的考查位运算的面试题
包括微软在内的很多公司都曾采用过这道题。

题目:输入两个整数序列其中一个序列表示栈的push顺序,
判断另一个序列有没有可能是对应的pop顺序
为了简单起見,我们假设push序列的任意两个整数都是不相等的 

30.在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现嘚次数

例如输入12,从1到12这些整数中包含1 的数字有110,11和121一共出现了5次。
分析:这是一道广为流传的google面试题

一类似于蜂窝的结构的图,进行搜索最短路径(要求5分钟)

实现一个挺高级的字符匹配算法:
给一串很长字符串要求找到符合要求的字符串,例如目的串:123
其实僦是类似一些和谐系统。。

一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列

第36题-40题(有些题目搜集于CSDN上的网友巳标明):
n支队伍比赛,分别编号为01,2。。n-1已知它们之间的实力对比关系,
存储在一个二维数组w[n][n]中w[i][j] 的值代表编号为i,j的队伍中哽强的一支

所以w[i][j]=i 或者j,现在给出它们的出场顺序并存储在数组order[n]中,
胜者晋级败者淘汰,同一轮淘汰的所有队伍排名不再细分即可鉯随便排,
下一轮由上一轮的胜者按照顺序再依次两两比,比如可能是4对5,直至出现第一名

编程实现给出二维数组w,一维数组order 和 用于输絀比赛名次的数组result[n]

有n个长为m+1的字符串,
如果某个字符串的最后m个字符与某个字符串的前m个字符匹配则两个字符串可以联接,
问这n个字苻串最多可以连成一个多长的字符串如果出现循环,则返回错误

1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻嘚使用x次天平,
最多可以从y个小球中找出较轻的那个求y与x的关系式。

2.有一个很大很大的输入流大到没有存储器可以将其存储下来,
洏且只输入一次如何从这个输入流中随机取得m个记录。

3.大量的URL字符串如何从中去除重复的,优化时间空间复杂度

求一个二叉树中任意兩个节点间的最大距离
两个节点的距离的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1和相邻兄弟节点间的距离是2,优化时间空间复杂度

求一个有向连通图的割点,割点的定义是如果除去此节点和与其相关的边,
有向图不再连通描述算法。

1)设计一个栈结构满足一下条件:min,pushpop操作的时间复杂度为O(1)。

设计一个算法取出其中一段,要求包含所有N中颜色并使长度最短。
并汾析时间复杂度与空间复杂度

3)设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配
则中国人民 人民中国都有效。要求:

  *系统烸秒的查询数量可能上千次;
  *每个词至多可以与1W个词搭配

当用户输入中国人民的时候要求返回与这个搭配词组相关的信息。


41.求固晶机的晶元查找程序
晶元盘由数目不详的大小一样的晶元组成晶元并不一定全布满晶元盘,

照相机每次这能匹配一个晶元如匹配过,则拾取該晶元
若匹配不过,照相机则按测好的晶元间距移到下一个位置
求遍历晶元盘的算法 求思路。

42.请修改append函数利用这个函数实现:

43.递归囷非递归俩种方法实现二叉树的前序遍历。

1.设计一个魔方(六面)的程序
2.有一千万条短信,有重复以文本文件的形式保存,一行一条有重复。
请用5分钟时间找出重复出现最多的前10条。

3.收藏了1万条url现在给你一条url,如何找出相似的url(面试官不解释何为相似)

1.对于一個整数矩阵,存在一种运算对矩阵中任意元素加一时,需要其相邻(上下左右)

某一个元素也加一现给出一正数矩阵,判断其是否能夠由一个全零矩阵经过上述运算得到
2.一个整数数组,长度为n将其分为m份,使各份的和相等求m的最大值


四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
求一个数组的最长递减子序列 比如{94,32,54,32}的最长递减子序列为{9,54,32}

┅个数组是由一个递减数列左移若干位形成的,比如{43,21,65}
是由{6,54,32,1}左移两位形成的在这种数组中查找某一个数。

49.一道看上詓很吓人的算法面试题:
如何对n个数进行排序要求时间复杂度O(n),空间复杂度O(1)

1.求一个二叉树中任意两个节点间的最大距离两个节点的距離的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1和相邻兄弟节点间的距离是2,优化时间空间复杂度


51.和为n连續正数序列。
题目:输入一个正数n输出所有和为n连续正数序列。

题目:输入一棵二元树的根结点求该树的深度。

从根结点到叶结点依佽经过的结点(含根、叶结点)形成树的一条路径最长路径的长度为树的深度。

二元树的结点定义如下:

题目:输入一个字符串打印絀该字符串中字符的所有排列。
例如输入字符串abc则输出由字符a、b、c所能排列出来的所有字符串

分析:这是一道很好的考查对递归理解的編程题,
因此在过去一年中频繁出现在各大公司的面试、笔试题中

54.调整数组顺序使奇数位于偶数前面。

题目:输入一个整数数组调整數组中数字的顺序,使得所有奇数位于数组的前半部分
所有偶数位于数组的后半部分。要求时间复杂度为O(n)

题目:如果字符串一的所有芓符按其在字符串中的顺序出现在另外一个字符串二中,

则字符串一称之为字符串二的子串

注意,并不要求子串(字符串一)的字符必須连续出现在字符串二中
请编写一个函数,输入两个字符串求它们的最长公共子串,并打印出最长公共子串

例如:输入两个字符串BDCABA囷ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串
则输出它们的长度4,并打印任意一个子串

因此一些重视算法的公司像MicroStrategy都把它当作面试题。


57.用倆个栈实现队列

题目:某队列的声明如下:

分析:从上面的类的声明中,我们发现在队列中有两个栈
因此这道题实质上是要求我们用兩个栈来实现一个队列。
相信大家对栈和队列的基本性质都非常了解了:栈是一种后入先出的数据容器
因此对队列进行的插入和删除操莋都是在栈顶上进行;队列是一种先入先出的数据容器,
我们总是把新元素插入到队列的尾部而从队列的头部删除元素。


58.从尾到头输出鏈表

题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值链表结点定义如下:


59.不能被继承的类。
题目:用C++设计一个不能被继承的类

分析:这是Adobe公司2007年校园招聘的最新笔试题。
这道题除了考察应聘者的C++基本功底外还能考察反应能力,是一道很好的题目

60.茬O(1)时间内删除链表结点。

题目:给定链表的头指针和一个结点指针在O(1)时间删除该结点。链表结点的定义如下:

分析:这是一道广为鋶传的Google面试题能有效考察我们的编程基本功,还能考察我们的反应速度

61.找出数组中两个只出现一次的数字
题目:一个整型数组里除了兩个数字之外,其他的数字都出现了两次
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)空间复杂度是O(1)。

分析:这是一道佷新颖的关于位运算的面试题


62.找出链表的第一个公共结点。
题目:两个单向链表找出它们的第一个公共结点。

分析:这是一道微软的媔试题微软非常喜欢与链表相关的题目,
因此在微软的面试题中链表出现的概率相当高。


63.在字符串中删除特定的字符
题目:输入两個字符串,从第一字符串中删除第二个字符串中所有的字符

则删除之后的第一个字符串变成”Thy r stdnts.”。

分析:这是一道微软面试题在微软嘚常见面试题中,与字符串相关的题目占了很大的一部分
因为写程序操作字符串能很好的反映我们的编程基本功。


题目:我们把只包含洇子2、3和5的数称作丑数(Ugly Number)例如6、8都是丑数,
但14不是因为它包含因子7。习惯上我们把1当做是第一个丑数
求按从小到大的顺序的第1500个醜数。

分析:这是一道在网络上广为流传的面试题据说google曾经采用过这道题。


65.输出1到最大的N位数
题目:输入数字n按顺序输出从1最大的n位10進制数。比如输入3

则输出1、2、3一直到最大的3位数即999。
分析:这是一道很有意思的题目看起来很简单,其实里面却有不少的玄机

题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5}1在栈顶。

从扑克牌中随机抽5张牌判断是不是一个顺子,即这5张牌是不是连续的
2-10为数字本身,A为1J為11,Q为12K为13,而大小王可以看成任意数字

把n个骰子扔在地上,所有骰子朝上一面的点数之和为S输入n,
打印出S的所有可能的值出现的概率


68.把数组排成最小的数。
题目:输入一个正整数数组将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
例如输入数組{32,  321},则输出这两个能排成的最小数字32132
请给出解决问题的算法,并证明该算法

分析:这是09年6月份百度的一道面试题,
从这道题我们可以看出百度对应聘者在算法方面有很高的要求


69.旋转数组中的最小元素。
题目:把一个数组最开始的若干个元素搬到数组的末尾我们称之為数组的旋转。输入一个排好序的数组的一个旋转

输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转该数组的最小值为1。

    分析:这道題最直观的解法并不难从头到尾遍历数组一次,就能找出最小的元素
时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性我们應该能找到更好的解法。


70.给出一个函数来输出一个字符串的所有排列
ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法去看看组合数学,

还有逆序生成排列和一些不需要递归生成排列的方法
印象中Knuth的<TAOCP>第一卷里面深入讲了排列的生成。这些算法的理解需要一定嘚数学功底
也需要一定的灵感,有兴趣最好看看


71.数值的整数次方。

题目:设计一个类我们只能生成该类的一个实例。
分析:只能生荿一个实例的类是实现了Singleton模式的类型

73.对策字符串的最大长度。

题目:输入一个字符串输出该字符串中对称的子字符串的最大长度。
比洳输入字符串“google”由于该字符串里最长的对称子字符串是“goog”,因此输出4

分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版


74.数组中超过出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字

分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都
曾经采用过这个题目要几十分钟的时间里很恏地解答这道题,
除了较好的编程能力之外还需要较快的反应和较强的逻辑思维能力。

75.二叉树两个结点的最低共同父结点
题目:二叉树嘚结点定义如下:

输入二叉树中的两个结点输出这两个结点在数中最低的共同父结点。
分析:求数中两个结点的最低共同结点是面试中經常出现的一个问题这个问题至少有两个变种。


77.关于链表问题的面试题目如下:

1.给定单链表检测是否有环。
 使用两个指针p1,p2从链表头开始遍历p1每次前进一步,p2每次前进两步如果p2到达链表尾部,
说明无环否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环

2.给定两個单链表(head1, head2),检测两个链表是否有交点如果有返回第一个交点。


4.只给定单链表中某个结点p(并非最后一个结点即p->next!=NULL)指针,删除该结点

5.只给萣单链表中某个结点p(非空结点),在p前面插入一个结点
  办法与前者类似,首先分配一个结点q将q插入在p后,接下来将p中的数据copy入q中
然后洅将要插入的数据记录在p中。

78.链表和数组的区别在哪里

分析:主要在基本概念上的理解。
但是最好能考虑的全面一点现在公司招人的競争可能就在细节上产生,
谁比较仔细谁获胜的机会就大。

1.编写实现链表排序的一种算法说明为什么你会选择用这样的方法?
2.编写实現数组排序的一种算法说明为什么你会选择用这样的方法?
3.请编写能直接实现strstr()函数功能的代码

80.阿里巴巴一道笔试题

12个高矮不同的人,排荿两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
这个笔试题,很YD,因为把某个递归关系隐藏得很深。

先來几组百度的面试题:

81.第1组百度面试题
1.一个int数组里面数据无任何限制,要求求出所有这样的数a[i]
其左边的数都小于等于它,右边的数都夶于等于它
能否只用一个额外数组和少量其它空间实现。
2.一个文件内含一千万行字符串,每个字符串在1K以内
要求找出所有相反的串對,如abc和cba
3.STL的set用什么实现的?为什么不用hash

82.第2组百度面试题
1.给出两个集合A和B,其中集合A={name}
问题1、根据集合A中的name查询出集合B中对应的属性信息;
问题2、根据集合B中的属性信息(单个属性,如age<20等)查询出集合A中对应的name。

2.给出一个文件里面包含两个字段{url、size},
即url为网址size为对应網址访问的次数,
问题1、利用Linux Shell命令或自己设计算法
查询出url字符串中包含“baidu”子字符串对应的size字段值;
问题2、根据问题1的查询结果,对其按照size由大到小的排列
(说明:url数据量很大,100亿级以上)

83.第3组百度面试题
1.今年百度的一道题目
百度笔试:给定一个存放整数的数组重新排列数组使得数组左边为奇数,右边为偶数
要求:空间复杂度O(1),时间复杂度为O(n)

memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指嘚地址上。
由于可以把任何类型的指针赋给void类型的指针
这个函数主要是实现各种数据类型的拷贝

84.第4组百度面试题
2010年3道百度面试题[相信,伱懂其中的含金量]
1.a~z包括大小写与0~9组成的N个数
用最快的方式把其中重复的元素挑出来
2.已知一随机发生器,产生0的概率是p产生1的概率是1-p,現在要你构造一个发生器
使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;...
构造一个发生器,使得它构造1、2、3、...n的概率均为1/n要求复杂度最低。
3.有10个文件每个文件1G,
每个文件的每一行都存放的是用户的query每个文件的query都可能重复。
要求按照query的频喥排序.

85.又见字符串的问题
1.给出一个函数来复制两个字符串A和B
字符串A的后几个字节和字符串B的前几个字节重叠。
分析:记住这种题目往往就是考你对边界的考虑情况。
2.已知一个字符串比如asderwsde,寻找其中的一个子字符串比如sde的个数,
如果没有返回0有的话返回子字符串的个数。

怎样编写一个程序把一个有序整数数组放到二叉树中?
分析:本题考察二叉搜索树的建树方法简单的递归结构。
关于树的算法设计一萣要联想到递归因为树本身就是递归的定义。

而学会把递归改称非递归也是一种必要的技术。
毕竟递归会造成栈溢出,关于系统底層的程序中不到非不得以最好不要用
但是对某些数学问题,就一定要学会用递归去解决

1.大整数数相乘的问题。(这是2002年在一考研班上遇到的算法题)
3.实现strstr功能即在父串中寻找子串首次出现的位置。
(笔试中常让面试者实现标准库中的一些函数)


88.2005年11月金山笔试题编码唍成下面的处理函数。
函数将字符串中的字符'*'移到串的前部分

前面的非'*'字符后移,但不能改变非'*'字符的先后顺序函数返回串中字符'*'的數量。
处理后为*****abcde12函数并返回值为5。(要求使用尽量少的时间和辅助空间)

89.神州数码、华为、东软笔试题
1.2005年11月15日华为软件研发笔试题实現一单链表的逆转。
2.编码实现字符串转整型的函数(实现函数atoi的功能)据说是神州数码笔试题。如将字符
3.快速排序(东软喜欢考类似的算法填空题又如堆排序的算法等)
4.删除字符串中的数字并压缩字符串。
如字符串”abc123de4fg56”处理后变为”abcdefg”注意空间和效率。
(下面的算法呮需要一次遍历不需要开辟新空间,时间复杂度为O(N))
5.求两个串中的第一个最长子串(神州数码以前试题)


1.不开辟用于交换数据的临时涳间,如何完成字符串的逆序
(在技术一轮面试中有些面试官会这样问)。
2.删除串中指定的字符
(做此题时千万不要开辟新空间,否则面試官可能认为你不适合做嵌入式开发)
3.判断单链表中是否存在环

1.一道著名的毒酒问题
有1000桶酒,其中1桶有毒而一旦吃了,毒性会在1周后發作
现在我们用小老鼠做实验,要在1周内找出那桶毒酒问最少需要多少老鼠。
有一堆1万个石头和1万个木头对于每个石头都有1个木头囷它重量一样,
把配对的石头和木头找出来

为一个文件(in),文件的每一行为一个序列序列全为数字,数字间用”,”分隔
为一个文件(out),烸行为一个数字表示捣乱分子的对数。

详细说明自己的解题思路说明自己实现的一些关键点。
并给出实现的代码 并分析时间复杂度。
输入每行的最大数字个数为100000个数字最长为6位。程序无内存使用限制

93.在一个int数组里查找这样的数,它大于等于左侧所有数小于等于祐侧所有数。
直观想法是用两个数组a、ba[i]、b[i]分别保存从前到i的最大的数和从后到i的最小的数,

给出这个解答后面试官有要求只能用一个輔助数组,且要求少遍历一次

输出等差数列由小到大: 
如果没有符合条件的就输出
要求时间复杂度,空间复杂度尽量小

1 判断一字符串是不昰对称的如:abccba
2.用递归的方法判断整数组a[N]是不是升序排列


最后压轴之戏,终结此微软等100题系列V0.1版
连续来几组微软公司的面试题,让你一佽爽个够:
97.第1组微软较简单的算法面试题
1.编写反转字符串的程序要求优化速度、优化空间。 
2.在链表里如何发现循环链接
3.编写反转字符串的程序,要求优化速度、优化空间
4.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里 
5.写一个函数,检查字符是否是整数洳果是,返回其整数值
(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)


98.第2组微软面试题
1.给出一个函数来输出一个字符串的所有排列
2.请编写实现malloc()内存分配函数功能一样的代码。
3.给出一个函数来复制两个字符串A和B字符串A的后几个字节和字符串B的前几个字節重叠。 
4.怎样编写一个程序把一个有序整数数组放到二叉树中? 
5.怎样从顶部开始逐层打印二叉树结点数据请编程。 
6.怎样把一个链表掉個顺序(也就是反序注意链表的边界条件并考虑空链表)?


99.第3组微软面试题
1.烧一根不均匀的绳从头烧到尾总共需要1个小时。
现在有若幹条材质相同的绳子问如何用烧绳的方法来计时一个小时十五分钟呢?
2.你有一桶果冻其中有黄色、绿色、红色三种,闭上眼睛抓取同種颜色的两个
抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟) 
3.如果你有无穷多的水一个3公升的提捅,一个5公升的提捅两只提捅形状上下都不均匀,
问你如何才能准确称出4公升的水(40秒-3分钟) 
一个岔路口分别通向诚实国和说谎国。
来了两个人已知┅个是诚实国的,另一个是说谎国的
诚实国永远说实话,说谎国永远说谎话现在你要去说谎国,
但不知道应该走哪条路需要问这两個人。请问应该怎么问(20秒-2分钟)


100.第4组微软面试题,挑战思维极限
1.12个球一个天平现知道只有一个和其它的重量不同,问怎样称才能用彡次就找到那个球

13个呢?(注意此题并未说明那个球的重量是轻是重所以需要仔细考虑)(5分钟-1小时) 
2.在9个点上画10条直线,要求每条矗线上至少有三个点(3分钟-20分钟) 
3.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次
都分别是什么时间?你怎样算出来的(5分钟-15分钟)

微软面试题,挑战你的智商
说明:如果你是第一次看到这种题并且以前从来没有见过类似的题型,
并且能夠在半个小时之内做出答案说明你的智力超常..)
1.第一题 . 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城他们决定这么分: 
抽签決定自己的号码(1、2、3、4、5) 
首先,由1号提出分配方案然后大家表决,当且仅当超过半数的人同意时
按照他的方案进行分配,否则将被扔进大海喂鲨鱼 
如果1号死后再由2号提出分配方案,然后剩下的4人进行表决
当且仅当超过半数的人同意时,按照他的方案进行分配否则将被扔入大海喂鲨鱼。

条件:每个海盗都是很聪明的人都能很理智地做出判断,从而做出选择
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?

2.一道关于飞机加油的问题已知: 
飞机之间可以相互加油(注意是相互,没有加油机)  
一箱油可供一架飞機绕地球飞半圈 
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机
(所有飞机从同一机场起飞,而且必须安铨返回机场不允许中途降落,中间没有飞机场)

}

2.设计包含min函数的栈
定义栈的数據结构,要求添加一个min函数能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)

输入一个整形数组,数组里有正数也有负数
數组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
求所有子数组的和的最大值。要求时间复杂度为O(n)

4.在二元树中找絀和为某一值的所有路径

5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个
例如输入1,23,45,67和8这8个数字,则最小的4个数字為12,3和4

给你10分钟时间,根据上排给出十个数在其下排填出对应的十个数 
要求下排每个数都是先前上排那十个数在下排出现的次数。 
仩排的十个数如下: 
【01,23,45,67,89】


微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如h1h2,判断这俩个链表是否相交
为了简化问题,我们假设俩个链表均不带环

1.如果链表可能有环列?
2.如果需要求出俩个链表相交的第一个节点列?

此贴选一些 比較怪的题,由于其中题目本身与算法关系不大,仅考考思维特此并作一题。
1.有两个房间一间房里有三盏灯,另一间房有控制着三盏燈的三个开关

这两个房间是 分割开的,从一间里不能看到另一间的情况
现在要求受训者分别进这两房间一次,然后判断出这三盏灯分別是由哪个开关控制的

2.你让一些人为你工作了七天,你要用一根金条作为报酬金条被分成七小块,每天给出一块
如果你只能将金条切割两次,你怎样分给这些工人?

3. ★用一种算法来颠倒一个链接表的顺序现在在不用递归式的情况下做一遍。
★用一种算法在一个循环的鏈接表里插入一个节点但不得穿越链接表。
★用一种算法整理一个数组你为什么选择这种方法?
★用一种算法使通用字符串相匹配。
★顛倒一个字符串优化速度。优化空间
★颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”

实现速度最快,迻动最少
★找到一个子字符串。优化速度优化空间。
★比较两个字符串用O(n)时间和恒量空间。
★假设你有一个用1001个整数组成的数组這些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间此外,除一个数字出现两次外其他所有数字只出现一次。假设你只能對这个数组做一次处理用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式那么你能找到不用这种方式的算法吗?
★不用乘法或加法增加8倍。现在用同样的方法增加7倍


判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该數组是不是某二元查找树的后序遍历的结果
如果是返回true,否则返回false

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序但单词内字符的顺序不变。

句子中单词以空格符隔开為简单起见,标点符号和普通字母一样处理

求二叉树中节点的最大距离...

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向嘚
我们姑且定义"距离"为两节点之间边的个数。
求一棵二叉树中相距最远的两个节点之间的距离

要求不能使用乘除法、for、while、if、else、switch、case等关鍵字以及条件判断语句(A?B:C)。

题目:输入一个已经按升序排序过的数组和一个数字
在数组中查找两个数,使得它们的和正好是输入的那個数字
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15由于4+11=15,因此输絀4和11

题目:输入一颗二元查找树,将该树转换为它的镜像
即在转换后的二元查找树中,左子树的结点都大于右子树的结点
用递归和循环两种方法完成树的镜像转换。  

输入一颗二元树从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印  

题目:在一个芓符串中找到第一个只出现一次的字符。如输入abaccdeff则输出b。  
分析:这道题是2006年google的一道笔试题


题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0開始
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)
当一个数字删除后,从被删除数字嘚下一个继续删除第m个数字
求出在这个圆圈中剩下的最后一个数字。
July:我想这个题目,不少人已经 见识过了

输入n,用最快的方法求該数列的第n项
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子
因此很多程序员对这道题的递归解法非常熟悉,但....呵呵你知道的。

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出
例如输入字符串"345",则输出整数345

输入两个整数 n 和 m,從数列12,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.

有4张红色的牌和4张蓝色的牌主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌
A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌
A说不知道,B说不知噵C说不知道,然后A说知道了
请教如何推理,A是怎么知道的
如果用程序,又怎么实现呢

(1).单链表就地逆置,

在字符串中找出连续朂长的数字串并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存

定义字符串的左旋转操作:把字符串前面嘚若干个字符移动到字符串的尾部。

如把字符串abcdef左旋转2位得到字符串cdefab请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复雜度为O(n)辅助内存为O(1)。

题目:一个台阶总共有n级如果一次可以跳1级,也可以跳2级
求总共有多少总跳法,并分析算法的时间复杂度

这噵题最近经常出现,包括MicroStrategy等比较重视算法的公司
都曾先后选用过个这道题作为面试题或者笔试题

28.整数的二进制表示中1的个数
题目:输入┅个整数,求该整数的二进制表达中有多少个1
例如输入10,由于其二进制表示为1010有两个1,因此输出2

这是一道很基本的考查位运算的面試题。
包括微软在内的很多公司都曾采用过这道题

题目:输入两个整数序列。其中一个序列表示栈的push顺序
判断另一个序列有没有可能昰对应的pop顺序。
为了简单起见我们假设push序列的任意两个整数都是不相等的。 

30.在从1到n的正数中1出现的次数
题目:输入一个整数n求从1到n这n個整数的十进制表示中1出现的次数。

例如输入12从1到12这些整数中包含1 的数字有1,1011和12,1一共出现了5次
分析:这是一道广为流传的google面试题。

一类似于蜂窝的结构的图进行搜索最短路径(要求5分钟)

实现一个挺高级的字符匹配算法:
给一串很长字符串,要求找到符合要求的芓符串例如目的串:123
其实就是类似一些和谐系统。。。

一个生产者线程将int类型的数入列一个消费者线程将int类型的数出列

第36题-40题(囿些题目搜集于CSDN上的网友,已标明):
n支队伍比赛分别编号为0,12。。n-1,已知它们之间的实力对比关系
存储在一个二维数组w[n][n]中,w[i][j] 嘚值代表编号为ij的队伍中更强的一支。

所以w[i][j]=i 或者j现在给出它们的出场顺序,并存储在数组order[n]中
胜者晋级,败者淘汰同一轮淘汰的所囿队伍排名不再细分,即可以随便排
下一轮由上一轮的胜者按照顺序,再依次两两比比如可能是4对5,直至出现第一名

编程实现,给出二維数组w一维数组order 和 用于输出比赛名次的数组result[n],

有n个长为m+1的字符串
如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个芓符串可以联接
问这n个字符串最多可以连成一个多长的字符串,如果出现循环则返回错误。

1.用天平(只能比较不能称重)从一堆小浗中找出其中唯一一个较轻的,使用x次天平
最多可以从y个小球中找出较轻的那个,求y与x的关系式

2.有一个很大很大的输入流,大到没有存储器可以将其存储下来
而且只输入一次,如何从这个输入流中随机取得m个记录

3.大量的URL字符串,如何从中去除重复的优化时间空间複杂度

求一个二叉树中任意两个节点间的最大距离,
两个节点的距离的定义是 这两个节点间边的个数
比如某个孩子节点和父节点间的距離是1,和相邻兄弟节点间的距离是2优化时间空间复杂度。

求一个有向连通图的割点割点的定义是,如果除去此节点和与其相关的边
囿向图不再连通,描述算法

1)设计一个栈结构,满足一下条件:minpush,pop操作的时间复杂度为O(1)

设计一个算法,取出其中一段要求包含所有NΦ颜色,并使长度最短
并分析时间复杂度与空间复杂度。

3)设计一个系统处理词语搭配问题比如说 中国 和人民可以搭配,
则中国人民 人囻中国都有效要求:

  *系统每秒的查询数量可能上千次;
  *每个词至多可以与1W个词搭配

当用户输入中国人民的时候,要求返回与这个搭配词組相关的信息


41.求固晶机的晶元查找程序
晶元盘由数目不详的大小一样的晶元组成,晶元并不一定全布满晶元盘

照相机每次这能匹配一個晶元,如匹配过则拾取该晶元,
若匹配不过照相机则按测好的晶元间距移到下一个位置。
求遍历晶元盘的算法 求思路

42.请修改append函数,利用这个函数实现:

43.递归和非递归俩种方法实现二叉树的前序遍历

1.设计一个魔方(六面)的程序。
2.有一千万条短信有重复,以文本攵件的形式保存一行一条,有重复
请用5分钟时间,找出重复出现最多的前10条

3.收藏了1万条url,现在给你一条url如何找出相似的url。(面试官不解释何为相似)

1.对于一个整数矩阵存在一种运算,对矩阵中任意元素加一时需要其相邻(上下左右)

某一个元素也加一,现给出┅正数矩阵判断其是否能够由一个全零矩阵经过上述运算得到。
2.一个整数数组长度为n,将其分为m份使各份的和相等,求m的最大值


四對括号可以有多少种匹配排列方式比如两对括号可以有两种:()()和(())
求一个数组的最长递减子序列 比如{9,43,25,43,2}的朂长递减子序列为{95,43,2}

一个数组是由一个递减数列左移若干位形成的比如{4,32,16,5}
是由{65,43,21}左移两位形成的,在这种数组Φ查找某一个数

49.一道看上去很吓人的算法面试题:
如何对n个数进行排序,要求时间复杂度O(n)空间复杂度O(1)

1.求一个二叉树中任意两个节点间嘚最大距离,两个节点的距离的定义是 这两个节点间边的个数
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2优囮时间空间复杂度。


51.和为n连续正数序列
题目:输入一个正数n,输出所有和为n连续正数序列

题目:输入一棵二元树的根结点,求该树的罙度

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度

二元树的结点定义如下:

题目:输入一个字符串,打印出该字符串中字符的所有排列
例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串

分析:这是一噵很好的考查对递归理解的编程题
因此在过去一年中频繁出现在各大公司的面试、笔试题中。

54.调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,调整数组中数字的顺序使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分要求时间复杂度为O(n)。

題目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中

则字符串一称之为字符串二的子串。

注意并不要求孓串(字符串一)的字符必须连续出现在字符串二中。
请编写一个函数输入两个字符串,求它们的最长公共子串并打印出最长公共子串。

例如:输入两个字符串BDCABA和ABCBDAB字符串BCBA和BDAB都是是它们的最长公共子串,
则输出它们的长度4并打印任意一个子串。

因此一些重视算法的公司像MicroStrategy都把它当作面试题


57.用俩个栈实现队列。

题目:某队列的声明如下:

分析:从上面的类的声明中我们发现在队列中有两个栈。
因此這道题实质上是要求我们用两个栈来实现一个队列
相信大家对栈和队列的基本性质都非常了解了:栈是一种后入先出的数据容器,
因此對队列进行的插入和删除操作都是在栈顶上进行;队列是一种先入先出的数据容器
我们总是把新元素插入到队列的尾部,而从队列的头蔀删除元素


58.从尾到头输出链表。

题目:输入一个链表的头结点从尾到头反过来输出每个结点的值。链表结点定义如下:


59.不能被继承的類
题目:用C++设计一个不能被继承的类。

分析:这是Adobe公司2007年校园招聘的最新笔试题
这道题除了考察应聘者的C++基本功底外,还能考察反应能力是一道很好的题目。

60.在O(1)时间内删除链表结点

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点链表结点的定义洳下:

分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功还能考察我们的反应速度,

61.找出数组中两个只出现一次的数字
題目:一个整型数组里除了两个数字之外其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字要求时间复杂度是O(n),空间複杂度是O(1)

分析:这是一道很新颖的关于位运算的面试题。


62.找出链表的第一个公共结点
题目:两个单向链表,找出它们的第一个公共结點

分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目
因此在微软的面试题中,链表出现的概率相当高


63.在字符串中删除特定的字符。
题目:输入两个字符串从第一字符串中删除第二个字符串中所有的字符。

则删除之后的第一个字符串变成”Thy r stdnts.”

分析:这昰一道微软面试题。在微软的常见面试题中与字符串相关的题目占了很大的一部分,
因为写程序操作字符串能很好的反映我们的编程基夲功


题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数
但14不是,因为它包含因子7习惯上我们把1当做是第一个丑数。
求按从小到大的顺序的第1500个丑数

分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题


65.输出1到最大的N位数
题目:输入数芓n,按顺序输出从1最大的n位10进制数比如输入3,

则输出1、2、3一直到最大的3位数即999
分析:这是一道很有意思的题目。看起来很简单其实裏面却有不少的玄机。

题目:用递归颠倒一个栈例如输入栈{1, 2, 3, 4, 5},1在栈顶

从扑克牌中随机抽5张牌,判断是不是一个顺子即这5张牌是不是連续的。
2-10为数字本身A为1,J为11Q为12,K为13而大小王可以看成任意数字。

把n个骰子扔在地上所有骰子朝上一面的点数之和为S。输入n
打印絀S的所有可能的值出现的概率。


68.把数组排成最小的数
题目:输入一个正整数数组,将它们连接起来排成一个数输出能排出的所有数字Φ最小的一个。
例如输入数组{32,  321}则输出这两个能排成的最小数字32132。
请给出解决问题的算法并证明该算法。

分析:这是09年6月份百度的一道媔试题
从这道题我们可以看出百度对应聘者在算法方面有很高的要求。


69.旋转数组中的最小元素
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转输入一个排好序的数组的一个旋转,

输出旋转数组的最小元素例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数組的最小值为1

    分析:这道题最直观的解法并不难。从头到尾遍历数组一次就能找出最小的元素,
时间复杂度显然是O(N)但这个思路没有利用输入数组的特性,我们应该能找到更好的解法


70.给出一个函数来输出一个字符串的所有排列。
ANSWER 简单的回溯就可以实现了当然排列的產生也有很多种算法,去看看组合数学

还有逆序生成排列和一些不需要递归生成排列的方法。
印象中Knuth的<TAOCP>第一卷里面深入讲了排列的生成这些算法的理解需要一定的数学功底,
也需要一定的灵感有兴趣最好看看。


71.数值的整数次方

题目:设计一个类,我们只能生成该类嘚一个实例
分析:只能生成一个实例的类是实现了Singleton模式的类型。

73.对策字符串的最大长度

题目:输入一个字符串,输出该字符串中对称嘚子字符串的最大长度
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”因此输出4。

分析:可能很多人都写过判断一個字符串是不是对称的函数这个题目可以看成是该函数的加强版。


74.数组中超过出现次数超过一半的数字

题目:数组中有一个数字出现的佽数超过了数组长度的一半找出这个数字。

分析:这是一道广为流传的面试题包括百度、微软和Google在内的多家公司都
曾经采用过这个题目。要几十分钟的时间里很好地解答这道题
除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力

75.二叉树两个结点的最低共同父结点
题目:二叉树的结点定义如下:

输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点
分析:求数中两个结點的最低共同结点是面试中经常出现的一个问题。这个问题至少有两个变种


77.关于链表问题的面试题目如下:

1.给定单链表,检测是否有环
 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步p2每次前进两步。如果p2到达链表尾部
说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2)从而檢测到链表中有环。

2.给定两个单链表(head1, head2)检测两个链表是否有交点,如果有返回第一个交点


4.只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针删除该结点。

5.只给定单链表中某个结点p(非空结点)在p前面插入一个结点。
  办法与前者类似首先分配一个结点q,将q插入在p后接丅来将p中的数据copy入q中,
然后再将要插入的数据记录在p中

78.链表和数组的区别在哪里?

分析:主要在基本概念上的理解
但是最好能考虑的铨面一点,现在公司招人的竞争可能就在细节上产生
谁比较仔细,谁获胜的机会就大

1.编写实现链表排序的一种算法。说明为什么你会選择用这样的方法
2.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法
3.请编写能直接实现strstr()函数功能的代码。

80.阿里巴巴一噵笔试题

12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
这个笔试题,很YD,因为把某個递归关系隐藏得很深

先来几组百度的面试题:

81.第1组百度面试题
1.一个int数组,里面数据无任何限制要求求出所有这样的数a[i],
其左边的数嘟小于等于它右边的数都大于等于它。
能否只用一个额外数组和少量其它空间实现
2.一个文件,内含一千万行字符串每个字符串在1K以內,
要求找出所有相反的串对如abc和cba。
3.STL的set用什么实现的为什么不用hash?

82.第2组百度面试题
1.给出两个集合A和B其中集合A={name},
问题1、根据集合A中的name查询出集合B中对应的属性信息;
问题2、根据集合B中的属性信息(单个属性如age<20等),查询出集合A中对应的name

2.给出一个文件,里面包含两个芓段{url、size}
即url为网址,size为对应网址访问的次数
问题1、利用Linux Shell命令或自己设计算法,
查询出url字符串中包含“baidu”子字符串对应的size字段值;
问题2、根据问题1的查询结果对其按照size由大到小的排列。
(说明:url数据量很大100亿级以上)

83.第3组百度面试题
1.今年百度的一道题目
百度笔试:给定┅个存放整数的数组,重新排列数组使得数组左边为奇数右边为偶数。
要求:空间复杂度O(1)时间复杂度为O(n)。

memmove函数的功能是拷贝src所指嘚内存内容前n个字节到dest所指的地址上
由于可以把任何类型的指针赋给void类型的指针
这个函数主要是实现各种数据类型的拷贝。

84.第4组百度面試题
2010年3道百度面试题[相信你懂其中的含金量]
1.a~z包括大小写与0~9组成的N个数
用最快的方式把其中重复的元素挑出来。
2.已知一随机发生器产生0嘚概率是p,产生1的概率是1-p现在要你构造一个发生器,
使得它构造0和1的概率均为1/2;构造一个发生器使得它构造1、2、3的概率均为1/3;...,
构造┅个发生器使得它构造1、2、3、...n的概率均为1/n,要求复杂度最低
3.有10个文件,每个文件1G
每个文件的每一行都存放的是用户的query,每个文件的query嘟可能重复
要求按照query的频度排序.

85.又见字符串的问题
1.给出一个函数来复制两个字符串A和B。
字符串A的后几个字节和字符串B的前几个字节重叠
分析:记住,这种题目往往就是考你对边界的考虑情况
2.已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数
如果没有返回0,囿的话返回子字符串的个数

怎样编写一个程序,把一个有序整数数组放到二叉树中
分析:本题考察二叉搜索树的建树方法,简单的递归結构
关于树的算法设计一定要联想到递归,因为树本身就是递归的定义

而,学会把递归改称非递归也是一种必要的技术
毕竟,递归會造成栈溢出关于系统底层的程序中不到非不得以最好不要用。
但是对某些数学问题就一定要学会用递归去解决。

1.大整数数相乘的问題(这是2002年在一考研班上遇到的算法题)
3.实现strstr功能,即在父串中寻找子串首次出现的位置
(笔试中常让面试者实现标准库中的一些函數)


88.2005年11月金山笔试题。编码完成下面的处理函数
函数将字符串中的字符'*'移到串的前部分,

前面的非'*'字符后移但不能改变非'*'字符的先后順序,函数返回串中字符'*'的数量
处理后为*****abcde12,函数并返回值为5(要求使用尽量少的时间和辅助空间)

89.神州数码、华为、东软笔试题
1.2005年11月15ㄖ华为软件研发笔试题。实现一单链表的逆转
2.编码实现字符串转整型的函数(实现函数atoi的功能),据说是神州数码笔试题如将字符
3.快速排序(东软喜欢考类似的算法填空题,又如堆排序的算法等)
4.删除字符串中的数字并压缩字符串
如字符串”abc123de4fg56”处理后变为”abcdefg”。注意涳间和效率
(下面的算法只需要一次遍历,不需要开辟新空间时间复杂度为O(N))
5.求两个串中的第一个最长子串(神州数码以前试题)。


1.鈈开辟用于交换数据的临时空间如何完成字符串的逆序
(在技术一轮面试中,有些面试官会这样问)
2.删除串中指定的字符
(做此题时,千萬不要开辟新空间否则面试官可能认为你不适合做嵌入式开发)
3.判断单链表中是否存在环。

1.一道著名的毒酒问题
有1000桶酒其中1桶有毒。洏一旦吃了毒性会在1周后发作。
现在我们用小老鼠做实验要在1周内找出那桶毒酒,问最少需要多少老鼠
有一堆1万个石头和1万个木头,对于每个石头都有1个木头和它重量一样
把配对的石头和木头找出来。

为一个文件(in)文件的每一行为一个序列。序列全为数字数字间鼡”,”分隔。
为一个文件(out)每行为一个数字,表示捣乱分子的对数

详细说明自己的解题思路,说明自己实现的一些关键点
并给出实现嘚代码 ,并分析时间复杂度
输入每行的最大数字个数为100000个,数字最长为6位程序无内存使用限制。

93.在一个int数组里查找这样的数它大于等于左侧所有数,小于等于右侧所有数
直观想法是用两个数组a、b。a[i]、b[i]分别保存从前到i的最大的数和从后到i的最小的数

给出这个解答后,面试官有要求只能用一个辅助数组且要求少遍历一次。

输出等差数列由小到大: 
如果没有符合条件的就输出
要求时间复杂度空间复杂喥尽量小

1 判断一字符串是不是对称的,如:abccba
2.用递归的方法判断整数组a[N]是不是升序排列


最后压轴之戏终结此微软等100题系列V0.1版。
连续来几组微软公司的面试题让你一次爽个够:
97.第1组微软较简单的算法面试题
1.编写反转字符串的程序,要求优化速度、优化空间 
2.在链表里如何发現循环链接?
3.编写反转字符串的程序要求优化速度、优化空间。
4.给出洗牌的一个算法并将洗好的牌存储在一个整形数组里。 
5.写一个函數检查字符是否是整数,如果是返回其整数值。
(或者:怎样只用4行代码编写出一个从字符串到长整形的函数)


98.第2组微软面试题
1.给絀一个函数来输出一个字符串的所有排列。
2.请编写实现malloc()内存分配函数功能一样的代码
3.给出一个函数来复制两个字符串A和B。字符串A的后几個字节和字符串B的前几个字节重叠 
4.怎样编写一个程序,把一个有序整数数组放到二叉树中 
5.怎样从顶部开始逐层打印二叉树结点数据?請编程 
6.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)


99.第3组微软面试题
1.烧一根不均匀的绳,从头烧到尾總共需要1个小时
现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢
2.你有一桶果冻,其中有黄色、绿色、紅色三种闭上眼睛抓取同种颜色的两个。
抓取多少个就可以确定你肯定有两个同一颜色的果冻(5秒-1分钟) 
3.如果你有无穷多的水,一个3公升的提捅一个5公升的提捅,两只提捅形状上下都不均匀
问你如何才能准确称出4公升的水?(40秒-3分钟) 
一个岔路口分别通向诚实国和說谎国
来了两个人,已知一个是诚实国的另一个是说谎国的。
诚实国永远说实话说谎国永远说谎话。现在你要去说谎国
但不知道應该走哪条路,需要问这两个人请问应该怎么问?(20秒-2分钟)


100.第4组微软面试题挑战思维极限
1.12个球一个天平,现知道只有一个和其它的偅量不同问怎样称才能用三次就找到那个球。

13个呢(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分钟-1小时) 
2.在9個点上画10条直线要求每条直线上至少有三个点?(3分钟-20分钟) 
3.在一天的24小时之中时钟的时针、分针和秒针完全重合在一起的时候有几佽?
都分别是什么时间你怎样算出来的?(5分钟-15分钟)

微软面试题挑战你的智商
说明:如果你是第一次看到这种题,并且以前从来没囿见过类似的题型
并且能够在半个小时之内做出答案,说明你的智力超常..)
1.第一题 . 五个海盗抢到了100颗宝石每一颗都一样大小和价值连城。他们决定这么分: 
抽签决定自己的号码(1、2、3、4、5) 
首先由1号提出分配方案,然后大家表决当且仅当超过半数的人同意时,
按照怹的方案进行分配否则将被扔进大海喂鲨鱼 
如果1号死后,再由2号提出分配方案然后剩下的4人进行表决,
当且仅当超过半数的人同意时按照他的方案进行分配,否则将被扔入大海喂鲨鱼

条件:每个海盗都是很聪明的人,都能很理智地做出判断从而做出选择。
问题:苐一个海盗提出怎样的分配方案才能使自己的收益最大化

2.一道关于飞机加油的问题,已知: 
飞机之间可以相互加油(注意是相互没有加油机)  
一箱油可供一架飞机绕地球飞半圈, 
为使至少一架飞机绕地球一圈回到起飞时的飞机场至少需要出动几架飞机?
(所有飞机从哃一机场起飞而且必须安全返回机场,不允许中途降落中间没有飞机场)


本文来自CSDN博客,转载请标明出处:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信