笔试&面试算法题汇总

1、在一个长度为N的数组中找出最大的K个数

(1)具体算法参考:http://blog.csdn.net/acema/article/details/39695479 和 http://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html

(2)注意:时间复杂度最低为O(n)

2、大数相乘

参考:http://blog.csdn.net/to_be_better/article/details/50376014

3、求图的最短距离:

Dijkstra算法:使用广度优先搜索解决非负权值问题,解决从一个起始点到其余各顶点的最短路径算法。

Floyd算法:可以负权值两点之间的最短路径

SPFA算法:

Bellman_Ford算法:

(1)从点start到end:Dijkstra算法

参考:http://blog.chinaunix.net/uid-26548237-id-3834514.html

(2)遍历图中每一个点



4、深度优先遍历和广度优先遍历的时间复杂度(假设n个定点,e条边)

(1)如果用邻接矩阵存储,那么均为O(n*n)

(2)如果用邻接表便是,那么均为O(n+e)

原因如下:因为在邻接矩阵上遍历,一般至少需要将矩阵中元素一半给过一下,由于矩阵元素个数为n^2,因此时间复杂度就是O(n^2)
至于在邻接表上遍历时,过程与这个类似,但是邻接表中只是存储了边结点(e条边,无向图也只是2e个结点),加上表头结点为n(也就是顶点个数),因此时间复杂度为O(n+e)
搜索
另外,在邻接表中判断某个顶点是否关联,最坏时可能需要将链表中所有结点都遍历完(尤其是有向图中),此时时间复杂度自然就是O(e)了


5、硬币组合问题

参考:http://www.cnblogs.com/python27/archive/2013/09/05/3303721.html


6、点落在爱心曲线内的概率问题(阿里笔试题)

参考:http://blog.csdn.net/u010556493/article/details/60957290

你可能感兴趣的:(数据结构与算法)