算法题汇总(面试准备)

 

1.二叉树的前序,中序,后序遍历,递归和非递归的写法

2.一个数组,把其中奇数放在左边,偶数放在右边,不要求满足原始序列关系,要求inplace 时间On 空间O1

3.红黑树简单介绍一下,内部实现原理,主要用来做什么?

4.链表相关算法题

  1. 一个链表如何找中间点
  2. 链表如何判断是否有环
  3. 如果有环如何找到环的起点
  4. 两个链表如何判断是否有公共部分
  5. D情况下如果链表有环怎么办
  6. E情况下怎么找环的起点和公共部分起点

5.计算n的三次根号的值。(如果只能用梯度下降怎么做)

6.一个字符串中,有数字、字母、符号,求最长数字序列;求最长的、最多包含一个字母的数字序列。

7.64匹马,8个赛道,假设每匹马发挥稳定且没有体力问题,如果在用最少的比赛次数,选出跑的最快的8匹马?1024瓶毒药,10只老鼠的题。

9.leetcode二叉树题目中,可以自定义输入,输入一个list(默认完全二叉树,如果节点为空,则输入None),解析为一个二叉树的数据结构。

10.最大子串(动态规划)

11.n乘n矩阵,每个点是任意整数,输出和为最大的子矩阵内所有数的和,最优解复杂度n^3

12.二叉树层序遍历

13.内存拷贝,实现函数void memcpy(char* src, char* dest, int len);

需要考虑两个指针在长度len范围内有重叠的现象。

14.无序数组,找出最大值最小值    我的复杂度是2n,他说有复杂度是n的算法。

15.对很多图像的特征(1024维)进行检索,有什么压缩的方法吗?压缩精度:float32->int 8

16.对多个文件,文件存储了很多浮点数,要求内存不超过2G,但是每个文件都大于2G,怎么排序?

17.手写洗牌算法:N张牌等概率出现在每个位置

18.判断链表是否有环(快慢指针)

19.判断平衡二叉树(我只想到了最麻烦的层次遍历数叶子节点所在层数)

20.走一截台阶还是两节台阶, f(n)=f(n-1)+f(n-2)的这种(递归,DP,推荐直接说DP的方案)

21.股票交易记录求最大的买入和卖出的差值

22.1-N的所有素数,为什么要求根号,还有没有更优解?

23. 红黑树,B+,平衡二叉树

24.链表排序和top k问题

25. 三种常见的最短路径算法;狄杰斯特拉,普里姆,弗洛依德算法

(1)深度优先搜索和广度优先搜索(解决单源最短路径, 正权边)

从起始结点开始访问所有的深度遍历路径或广度优先路径,则到达终点结点的路径有多条,取其中路径权值最短的一条则为最短路径。

(2)弗洛依德算法(解决单多源最短路径, 正权边)

基本思想:最开始只允许经过1号顶点进行中转,接下来只允许经过1号和2号顶点进行中转......允许经过1~n号所有顶点进行中转来不断动态更新任意两点之间的最短路程即求从i号顶点到j号顶点只经过前k号点的最短路程。

(3)狄杰斯特拉(解决单源最短路径, 正权边

基本思想:每次找到离源点(如1号结点)最近的一个顶点然后以该顶点为中心进行扩展最终得到源点到其余所有点的最短路径
基本步骤:

1)设置标记数组book[]:将所有的顶点分为两部分,已知最短路径的顶点集合P和未知最短路径的顶点集合Q很显然最开始集合P只有源点一个顶点book[i]为1表示在集合P中;
2)设置最短路径数组dst[]并不断更新:初始状态下,令dst[i] = edge[s][i](s为源点,edge为邻接矩阵),很显然此时dst[s]=0,book[s]=1。此时,在集合Q中可选择一个离源点s最近的顶点u加入到P中。并依据以u为新的中心点,对每一条边进行松弛操作(松弛是指由结点s-->j的途中可以经过点u,并令dst[j]=min{dst[j], dst[u]+edge[u][j]}),并令book[u]=1;
3)在集合Q中再次选择一个离源点s最近的顶点v加入到P中。并依据v为新的中心点,对每一条边进行松弛操作(即dst[j]=min{dst[j], dst[v]+edge[v][j]}),并令book[v]=1;
4)重复3,直至集合Q为空。

(4)Bellman-Ford算法(解决负权边,解决单源最短路径,前几种方法不能求含负权边的图)::时间复杂度O(nm),空间复杂度O(m)

主要思想:对所有的边进行n-1轮松弛操作,因为在一个含有n个顶点的图中,任意两点之间的最短路径最多包含n-1边。换句话说,第1轮在对所有的边进行松弛后,得到的是从1号顶点只能经过一条边到达其余各定点的最短路径长度。第2轮在对所有的边进行松弛后,得到的是从1号顶点只能经过两条边到达其余各定点的最短路径长度。。。。。

Bellman_Ford还可以检测一个图是否含有负权回路如果在进行n-1轮松弛后仍然存在dst[e[i]] > dst[s[i]]+w[i]。

推荐:https://blog.csdn.net/wzy_2017/article/details/78910697

26.最小生成树 prim算法和Kruskal算法

(1)Prim 算法(以定点为中心的最小生成树)

(2)Kruskal 算法(以边为中心的最小生成树算法)

26.最小生成树 prim算法和Kruskal算法

拓扑排序的基础:有向无环图,它是描述一项工程进度的有效工具。

用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(Activity On Vertex network),简称AOV网

在AOV网中,完成工程的最短时间:从开始点到完成点的最长路径长度——关键路径。

参考博客:

https://blog.csdn.net/matrix_laboratory/article/details/11879127

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章