《数据结构与算法》学习指导手册
我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。
这里有每个知识点的难易程度、需要你掌握到什么程度、具体如何来学习。
如果你是数据结构和算法的初学者,或者你觉得自己的基础比较薄弱,希望这份学习指导,能够让你学起来能更加有的放矢,能把精力、时间花在刀刃上,获得更好的学习效果。
下面,我先给出一个大致的学习路线。

现在,针对每个知识点,我再给你逐一解释一下。这里先说明一下,下面标记的难易程度、是否重点、掌握程度,都只是针对初学者来说的,如果你已经有一定基础,可以根据自己的情况,安排自己的学习。
1.复杂度分析
它真的非常重要。必须要牢牢掌握,基本上要做到,简单代码能很快分析出时间、空间复杂度;对于复杂点的代码,比如递归代码,你也要掌握两种分析方法:递推公式和递归树。
对于初学者来说,光看复杂度分析文章,可能还不足以完全掌握复杂度分析。所以,在思考每种数据结构和算法的时候,都可以有意识地分析它们的时间、空间复杂度,有意识地去训练自己的复杂度分析能力。
难易程度:Medium
是否重点:10分
掌握程度:在不看我的分析的情况下,能自行分析专栏中大部分数据结构和算法的时间、空间复杂度
2.数组、栈、队列
这一部分内容非常简单,初学者学起来也不会很难。但是,作为基础的数据结构,数组、栈、队列,是后续很多复杂数据结构和算法的基础,所以,这些内容你一定要掌握。
难易程度:Easy
是否重点:8分
掌握程度:能自己实现动态数组、栈、队列
3.链表
链表非常重要!虽然理论内容不多,但链表上的操作却很复杂。所以,面试中经常会考察,你一定要掌握。而且,我这里说“掌握”不只是能看懂专栏中的内容,还能将专栏中提到的经典链表题目,比如链表反转、求中间结点等,轻松无bug地实现出来。
难易程度:Medium
是否重点:9分
掌握程度:能轻松写出经典链表题目代码
4.递归
对于初学者来说,递归代码非常难掌握,不管是读起来,还是写起来。但是,这道坎你必须要跨过,跨不过就不能算是入门数据结构和算法。我们后面讲到的很多数据结构和算法的代码实现,都要用到递归。
递归相关的理论知识也不多,所以还是要多练。你可以先在网上找些简单的题目练手,比如斐波那契数列、求阶乘等,然后再慢慢过渡到更加有难度的,比如归并排序、快速排序、二叉树的遍历、求高度,最后是回溯八皇后、背包问题等。
难易程度:Hard
是否重点:10分
掌握程度:轻松写出二叉树遍历、八皇后、背包问题、DFS的递归代码
5.排序、二分查找
这一部分并不难,你只需要能看懂我专栏里的内容即可。
难易程度:Easy
是否重点:7分
掌握程度:能自己把各种排序算法、二分查找及其变体代码写一遍就可以了
6.跳表
对于初学者来说,并不需要非得掌握跳表,所以,如果没有精力,这一章节可以先跳过。
难易程度:Medium
是否重点:6分
掌握程度:初学者可以先跳过。如果感兴趣,看懂专栏内容即可,不需要掌握代码实现
7.散列表
尽管散列表的内容我讲了很多,有三节课。但是,总体上来讲,这块内容理解起来并不难。但是,作为一种应用非常广泛的数据结构,你还是要掌握牢固散列表。
难易程度:Medium
是否重点:8分
掌握程度:对于初学者来说,自己能代码实现一个拉链法解决冲突的散列表即可
8.哈希算法
这部分纯粹是为了开拓思路,初学者可以略过。
难易程度:Easy
是否重点:3分
掌握程度:可以暂时不看
9.二叉树
这一部分非常重要!二叉树在面试中经常会被考到,所以要重点掌握。但是我这里说的二叉树,并不包含专栏中红黑树的内容。红黑树我们待会再讲。
难易程度:Medium
是否重点:9分
掌握程度:能代码实现二叉树的三种遍历算法、按层遍历、求高度等经典二叉树题目
10.红黑树
对于初学者来说,这一节课完全可以不看。
难易程度:Hard
是否重点:3分
掌握程度:初学者不用把时间浪费在上面
11. B+树
虽然B+树也算是比较高级的一种数据结构了,但是对初学者来说,也不是重点。有时候面试的时候还是会问的,所以这一部分内容,你能看懂专栏里的讲解就可以了。
难易程度:Medium
是否重点:5分
掌握程度:可看可不看
12.堆与堆排序
这一部分内容不是很难,初学者也是要掌握的。
难易程度:Medium
是否重点:8分
掌握程度:能代码实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top k、中位数)
13.图的表示
图的内容很多,但是初学者不需要掌握那么多。一般BAT等大厂面试,不怎么会面试有关图的内容,因为面试官可能也对这块不会很熟悉哈:)。但是,最基本图的概念、表示方法还是要掌握的。
难易程度:Easy
是否重点:8分
掌握程度:理解图的三种表示方法(邻接矩阵、邻接表、逆邻接表),能自己代码实现
14.深度广度优先搜索
这算是图上最基础的遍历或者说是搜索算法了,所以还是要掌握一下。这两种算法的原理都不难哈,但是代码实现并不简单,一个用到了队列,另一个用到了递归。对于初学者来说,看懂这两个代码实现就是一个挑战!可以等到其他更重要的内容都掌握之后,再来挑战,也是可以的。
难易程度:Hard
是否重点:8分
掌握程度:能代码实现广度优先、深度优先搜索算法
15.拓扑排序、最短路径、A*算法
这几个算法稍微高级点。如果你能轻松实现深度、广度优先搜索,那看懂这三个算法不成问题。不过,这三种算法不是重点。面试不会考的。
难易程度:Hard
是否重点:5分
掌握程度:有时间再看,暂时可以不看
16.字符串匹配(BF、RK)
BF非常简单,RK稍微复杂点,但都不难。这个最好还是掌握下。
难易程度:Easy
是否重点:7分
掌握程度:能实践BF算法,能看懂RK算法
17.字符串匹配(BM、KMP、AC自动机)
这三个算法都挺难的,对于算法有一定基础的人来说,看懂也不容易。所以,对于初学者来说,千万别浪费时间在这上面。即便有余力,看懂就好了,不用非得能自己实现。
难易程度:Hard
是否重点:3分
掌握程度:初学者不用把时间浪费在上面
18.字符串匹配(Trie)
这个还是要能看懂,不过不需要能代码实现。有些面试官喜欢考这个东西,主要是结合应用场景来考察,只是看你知不知道要用Trie树这个东西。
难易程度:Medium
是否重点:7分
掌握程度:能看懂,知道特点、应用场景即可,不要求代码实现
19.位图
位图不是重点,如果有余力最好掌握一下。
难易程度:Easy
是否重点:6分
掌握程度:看懂即可,能自己实现一个位图结构最好
20.四种算法思想
这个是重点,也是难点。贪心、分治、回溯、动态规划,每一个都不简单,其中动态规划又是最难、最烧脑的。要应付FLAG这样公司的面试,必须拿下这块内容。但是呢,学习要循序渐进,这块内容的学习可以放到最后,做个长时间的学习计划来攻克。
这块内容理论的东西不多,要想真的掌握,还是要大量刷题。
难易程度:Hard
是否重点:10分
掌握程度:可以放到最后,但是一定要掌握!做到能实现Leetcode上Medium难度的题目
学而时习之,专栏虽然已经结束,但是学习的同学和留言依旧源源不断。希望这份学习指导手册对你有帮助,也欢迎你继续给我留言,和大家一起交流、学习、进步。
相关文章:
《数据结构与算法》学习指导手册
我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。 这里有每个知识点的难易程度、需要你掌握到什么程度、具…...
ubuntu安装配置mantis
目录 前言安装Apache2安装PHP安装数据库mariadbmariadb安装MariaDB重置密码为MantisBT创建数据库和用户 phpmyadmin安装和配置安装phpmyadmin查看安装内容配置phpmyadmin1.phpmyadmin apache配置文件2.为phpmyadmin创建数据库和用户3.修改配置文件config-db.php4.重新运行 管理…...
node后端接收pdf接口
当从前端发送过来的数据是文件时,后端如何接收呢? const express require(express); const multer require(multer);const app express();// 设置文件存储路径和文件名 const storage multer.diskStorage({destination: (req, file, cb) > {cb(nu…...
[RPC] Motan快速开始
文章目录 一、概述二、功能三、XML配置使用1、同步调用1.1、pom中添加依赖1.2、为调用方和服务方创建公共接口。1.3、编写业务接口逻辑、创建并启动RPC Server。1.4、创建并执行RPC Client。 2、异步调用2.1、在接口类上加MotanAsync注解2.2、在client端配置motan_client.xml时…...
仿美团外卖微信小程序源码/美团外卖优惠券领劵小程序-自带流量主模式
源码简介: 仿美团外卖微信小程序源码,它是美团外卖优惠券领劵小程序,还自带流量主模式。可以领取外卖优惠券的小程序。实用方便。 美团优惠券小程序带举牌小人带菜谱流量主模式,挺多外卖小程序的,但是都没有搭建教程…...
【Python】Windows跟随程序启动和关闭系统代理
前言 在日常使用计算机时,偶尔可能需要配置代理来访问特定的网络资源或进行网络调试。 当在使用mitmproxy 时候, 程序开始前,需要手动打开系统代理;程序解释后,需要手动关闭系统代理。 这些重复性且没有技术含量工作…...
信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板
近期,华为轿车概念股在A股商场遭到热捧,多只股票迭创前史新高。10月23日,华为轿车概念股再度走强,到收盘,板块内圣龙股份、银宝山新涨停,轿车ETF在重仓股提振下盘中一度上涨近2%。业界人士认为,…...
LSM Tree 深度解析
我们将深入探讨日志结构合并树,也称为LSM Tree:这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构,例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…...
BurpSuite安装
下载 BurpSuite 下载 Java17 下载后确定版本 java -version获取启动器 密钥生成器 破解 将下载的 BurpSuite、启动器、密钥生成器,放入同一个目录 打开 CMD 进入该目录 启动密钥生成器 java -jar burp-keygen-scz.jar开启新的CMD,进入该目录 启动…...
VB.NET 三层登录系统实战:从设计到部署全流程详解
目录 前言: 什么是三层 为什么要用到三层: 饭店→软件 理解: 过程: 1.三层包图: 2.数据库 3.三层项目 4.用户界面 5.添加引用 代码实现: Entity层 BLL层 DAL层 UI层 总结: 前言: 什么是三层 三层就是把各个功能模块划分为表示层&#…...
【前端性能】性能优化手段-高频面试题
持续更新.............................最近更新2023/10/24 1. 讲一下png8、png16、png32的区别,并简单讲讲 png 的压缩原理 PNG8、PNG16、PNG32 是 PNG 图像格式的不同变种,它们主要区别在于颜色深度和透明度支持的不同。 区别 PNG8: PN…...
cleanmymacX4.14免费版mac清除浏览器缓存软件
当我们使用浏览器访问网站时,浏览器会自动缓存一些数据,比如网页缓存、DNS缓存、插件缓存、SSL证书缓存和Cookie缓存等。虽然有些缓存可以提高浏览器的使用体验,但是缓存过多也会导致一些问题,比如网页更新后浏览器仍然显示旧的内…...
分享个包含各省、市、区的编码数据的在线静态资源脚本
在翻《SpringBootVue3》——十三尼克陈作者的大型前后端分离项目实战里面,在看到地址管理的部分时,发现了该作者记录有一个静态的地址资源脚本 这里做个记录,打点 一、引入js <script src"https://s.yezgea02.com/1641120061385/td…...
Elasticsearch聚合----aggregations的简单使用
文章目录 Getting started1、搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情2、size0不展示命中记录,只展示聚合结果3、按照年龄聚合,并且请求这些年龄段的这些人的平均薪资4、查出所有年龄分布,…...
GOPS·2023上海站 | 提前剧透!阿里、腾讯、字节、擎创等专家齐聚上海,共话互联网运维
一、前言 2023年10月26日-27日,第二十一届 GOPS 全球运维大会 2023 上海站即将举行。作为年终前最后一场面向 IT 技术从业者的高端运维盛会。大会上,来自腾讯、阿里、字节跳动、抖音、美团、擎创科技等明星专家,将带来十大互联网行业精彩主…...
防关联浏览器推荐:MuLogin指纹浏览器安全登录多平台账号
在现今的数字时代,我们的生活离不开互联网。我们使用在线平台进行银行交易、购物、社交媒体互动和其他各种活动。为了保护个人隐私和账号安全,我们需要寻找一种安全且方便的方式来管理我们的在线账号。MuLogin指纹浏览器正是为了满足这些需求而设计的一款…...
部署SeaTunnel单节点Standalone 模式环境
1.前置准备: SeaTunnel支持运行在JDK8及以上环境。该步骤需要用户自行安装JDK环境。 2.下载安装包 本次部署使用的是2.3.1版本。如果你需要下载其它版本,可以从如下网址中查询对应的版本。 Apache SeaTunnel mkdir ~/seatunnel cd ~/seatunnelwget https://dl…...
二十三、设计模式之组合模式![
目录 二十三、设计模式之组合模式能帮我们干什么?主要解决什么问题?优缺点优点缺点: 使用的场景理解实现角色组合模式 总结 魔战已经完结。成功登顶。占领敌军最高峰。 二十三、设计模式之组合模式 “组合模式”也被称为“部分整体模式”该…...
hbase和aerospike基础概念及所对应的python包API使用
Hbase Hbase shell常用操作 1.创建表 create table name,column familytable name:表名 column family:列族名 2.查看所有表名称 list3.插入操作 put table name,row1,column family:column name,valuerow1:行键(即Row Key) column family:column name…...
监测难?误差大?北斗突破铁路监测预警难题,24小时全方位守护
受极端气象和复杂地形地质条件的影响,近年来铁路沿线地质灾害易发频发。为防范化解重大安全风险,提高自然灾害防治能力,国务院决策部署制定了《关于加强铁路自然灾害监测预警工作的指导意见》,强调了利用先进技术和手段开展各类自…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
