算法面试题集——从各大博客收集

1、任意给一个数,试证明这个数的某个倍数的十进制表示是01串,比如3的倍数111是二进制表示,5的倍数10是二进制表示。

2、证明素数有无穷多个

3、给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来

4、把一个链表逆过来,要求空间复杂度O(1)

5、统计代码行数以及注释的行数

6、要求用最快的速度求两个数组的交集,提示数组中的元素是无序的

7、将一个浮点数转化为字符串

8、给定两个排好序的数组A和B,他们中的元素个数都是n,求他们所有元素的中位数。要求:时间复杂度为O(logn),空间复杂度为O(1)

9、有两个数组a、b,大小都为n,数组中元素的值是整数类型、无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小?

10、对已排好序的数组A,一般来说可用二分查找可以很快找到。现有一特殊数组A[],它是循环递增的,如A[]={ 17 19 20 25 1 4 7 9},试在这样的数组中找一元素x,看看是否存在。

【以上题目的参考答案见博客一

11、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。

12、给定函数d(n)=n+n的各位之和,n为正整数,如d(78)=78+7+8=93。这样这个函数可以看成一个生成器,如93可以看成由78生成。
  定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。

13、有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米这五个位置上各有一只蚂蚁,木杆很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还是右是任意的,他们只会朝前走或掉头,但不会后退,当两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走,假设蚂蚁们每秒钟可以走1厘米的距离。求所有蚂蚁都离开木杆的最小时间和最大时间。

14、判断两棵树是否相等,请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。

15、找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

16、  n个空间(其中n<1M),存放a到a+n-1的数,位置随机且数字不重复,a为正且未知。现在第一个空间的数被误设置为-1。已经知道被修改的数不是最小的。请找出被修改的数字是多少。  

  例如:n=6,a=2,原始的串为5,3,7,6,2,4。现在被别人修改为-1,3,7,6,2,4。现在希望找到5。

17、序列Seq=[a,b,…z,aa,ab…az,ba,bb,…bz,…,za,zb,…zz,aaa,…]类似与excel的排列,任意给出一个字符串s=[a-z]+(由a-z字符组成的任意长度字符串),请问s是序列Seq的第几个。

18、写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。

19、平面内有11个点,由它们连成48条不同的直,由这些点可连成多少个三角形?

【以上题目的参考答案见博客二

20、输入一个升序数组,然后在数组中快速寻找两个数字,其和等于一个给定的值

21、有一个名人和很多平民在一块,平民都认识这个名人,但是这个名人不认识任何一个平民,任意两个平民之间是否认识是未知的,请设计一个算法,快速找个这个人中的那个名人。  已知已经实现了一个函数  bool know(int a,int b) 这个函数返回true的时候,表明a认识b,返回false的时候表明a不认识b。

22、有一类数组,例如书序[1,2,3,4,6,8,9,4,8,11,18,19,100] 前半部分是是一个递增数组,后面一个还是递增数组,但整个数组不是递增数组,那么怎么最快的找出其中一个数?

23、判断一个自然数是否是某个数的平方。当然不能使用开方运算。

【以上题目的参考答案见博客三

24、编程实现两个正整数的除法,当然不能用除法操作符

25、现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

26、求取字符串长度,不使用while、for等循环语句和字符串处理函数。

27、两个单向链表,有可能交叉,请设计算法判断是否交叉,如果交叉,返回交叉点!算法复杂度o(n)

28、在if里面请写入语句,使得打印出  Hello  World。【???】

29、有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。

30、判断点是否在多边形内的问题? 

【以上题目的参考答案见博客四

31、二叉树的前序、后序、中序、层次遍历,参考博客

32、快速排序、归并排序等排序算法的实现,参考博客

33、字符串拼接函数的实现

34、大数相乘

35、两个链表,按升序排序,合并后仍按升序,不准用递归,并求复杂度

36、平面上N个点,每两个点都确定一条直线 求出斜率最大 那条直线所通过 两个点 斜率不存在 情况不考虑 时间效率越高越好

【先把N个点按x排序。斜率k最大值为max(斜率(point[i],point[i+1])) 0<=i<n-2。复杂度Nlog(N)。以3个点为例,按照x排序后为ABC,假如3点共线,则斜率一样,假如不共线,则可以证明在AB或BC中,一定有一个点的斜率大于AC,一个点的斜率小于AC】

37、把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间

38、KMP算法实现程序,参考博客

39、编程并实现一个八皇后的解法

40、链表的归并排序

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

42、给你一个凸多边形,你怎么用一条线,把它分成面积相等的两部分

43、有一条数轴,上有一整数点s,点s两侧分别放了两个机器人,不知道两个机器人分别距离s的距离,两机器人不能相互通信。
  现在,给你以下指令:
  R(往右一格)
  L(往左一格)
  IF(S)是否在S点
  GOTO A,跳到A代码段。
  设计一套指令给两个机器人,让两个器机可以最终在某一点相遇。

44、怎么判断两棵二叉树是否是同构的

45、给你一个数n(最大为10000),怎么求其阶乘

46、试着用最小的比较次数去寻找数组中的最大值和最小值。

47、红黑树的删除操作,参考博客

48、a[N][20]输入N个长度不超过20的字符串,比较这些字符串中是否有完全相同的字母,且相同字母数是否相等。如何改进该算法,降低复杂度。

49、各种排序算法的比较次数

【】

50、8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下角,请设计一个算法使其能够获得最大价值的礼物。

51、有两个字符串s1和s2,其长度分别为l1和l2,将字符串s1插入到字符串s2中,可以插入到字符串s2的第一个字符的前面或者最后一个字符的后面,对于任意两个字符串s1和s2,判断s1插入到s2中后是否能够构成回文串。

52、已知有m个顶点,相邻的两个顶点之间有一条边相连接,首尾顶点也有一条边连接,这样就构成了一个圆环。现在有一个二维数组M[][],M[i][j]=1时,表明第i和j个节点之间有条边存在,M[i][j]=0时,表明第i和j个节点之间没有边存在,其中 M[i][i]=0,M[i][j]=M[j][i],输入为一个二维数组M[][]和顶点的个数n,试着判断该图中是否存在两个圆环,且两个圆环彼此之间没有公共点。试着实现下面这个函数:

bool IsTwoCircle(int **M,int n)
{
  ......
}

53、给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增

1 3 7 15 16

2 5 8 18 19

4 6 9 22 23
10 13 17 24 28
20 21 25 26 33
现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)

54、设 一个64位整型n,各个bit位是1的个数为a个. 比如7, 2进制就是 111, 所以a为3。现在给出m个数, 求各个a的值。要求代码实现。

55、找出数组中只出现一次的3个数

56、do while(0)在宏定义中的应用

【以上题目的参考答案见博客五

原文地址:https://www.cnblogs.com/xiangzhi/p/4696544.html