480页数据结构和算法手册(附200道大厂真题)

数据结构和算法的重要性不需要过多强调了,可以说是大厂面试的标配。对于一个算法牛人,即便计算机基础差点,大厂也更愿意要。 算法厉害说明他数学建模能力强,逻辑思维强,有了过硬的底层能力,其他计算机相关的知识只要肯学就不是问题。

另外,算法不光用在面试上,工作里也是能用到的,比如做导航规划,用最短路径算法肯定比遍历的方式更快。

我们都知道,程序 = 数据结构 + 算法 数据结构是数据的组织形式,而算法是建立在数据结构基础之上的解决问题的方式。 因为有了有序数组,我们可以在此之上提出二分查找加快查询速度;因为有了型结构,我们可以在此之上提出最短路径算法加快路径搜索。

所以说,数据结构和算法 这部分核心要学的就是学习各种各样的数据结构,以及在此数据结构之上衍生出来的各种算法。从而在工作中 能够高效得解决问题。

我搜集数据结构和算法的优质资料整理成册,内容包括算法原理、代码实现、LeetCode实战和200道大厂面试真题。共 480 页 pdf,想学习算法的朋友可以访问 GitHub 项目下载。480页数据结构和算法手册

pic1.png

pic2.png

下面介绍下手册的内容,以链接为主。(注: pdf内容都是正文,没有链接)

算法性能分析

数据结构

数组

数组算是最常见的一种数据结构,按照维度可以分为:一维数组、二维数组、...、n维数组,在实际使用中, 主要以一维数组和二位数组为主。

一维数组上常见的算法有排序和查找,二维数组上常见的算法有动态规划。

排序

二分查找

动态规划

动态规划的核心思想是将求解原问题的最优解转化为求解子问题的最优解。在实际求解过程中,先计算子问题的最优解,并将其保存在数据组中, 子问题求解完后,原问题自然就解决了。解决动态规划问题的数据结构有数组、树和图,其中二维数组最为常见。

image.png

链表

数组这种数据结构适合查找,查找第 i 个元素,根据下表 a[i] 可以直接查到,但不适合插入和差删除 ,因为需要移动大量数据。

而链表正好相反,适合插入删除,更改指针的指向即可,无需移动数据,而查找效率比数组慢,查找第 i 个元素,只能 从表头开始,一个个向下查找。

image.png

栈和队列

栈和队列也是两种相对应的数据结构,栈中的元素是先进后出,队列中的元素是先进先出。 这两种数据结构能够解决不少实际问题,同时跟其他数据结构结合也能发挥更大的作用。

队列会有一些变种,如:优先队列、循环队列、双端队列等。

image.png

散列表

树形结构广泛应用于排序、查找算法中,根据树杈的个数分为二叉树、多叉树(如:B树),在 数据结构和算法中我们主要学习的是二叉树。

二叉树

image.png

二叉查找树

二叉排序树中的元素是有序的,并且天然地实现了二分查找算法。但缺点是树有可能不平衡, 极端情况下,一棵只有左子树或者右子树的二叉查找树,查询的时间复杂度退化为 O(n)。

image.png

平衡二叉树

由于二叉查找树存在不平衡的情况,导致查找的时间复杂度退化为 O(n),因此需要采用一定的算法将二叉查找树保持平衡。

image.png

图算是比较复杂的数据结构了,而且实际应用多。生活中随处可见图结构,如:互联网、城市和道路等。 也正是因为图在生活中非常常见,所以在图上会产生比较多的算法。

image.png

最小生成树

一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树有许多重要的应用,如:要在n个城市之间铺设光缆,使得铺设光缆的总费用最低。

最短路算法

最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。

拓扑排序

将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。

LeetCode 实战

大厂面试真题

算法

回溯

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。

分治

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

贪心

动态规划

见“数据结构-数组-动态规划”部分

排序

见“数据结构-数组-排序”部分

欢迎公众号 「渡码」,输出优质编程内容。

duma
原文地址:https://www.cnblogs.com/duma/p/15409870.html