欢迎光临
免费的PDF电子书下载网站

labuladong的算法小抄+漫画算法(套装共2册) PDF下载

编辑推荐

小灰的算法故事给算法这颗“炮弹”包上了“糖衣”,让算法的威力潜藏于内,外表不再吓人,萌萌哒Q弹可爱。
从基本数据结构,到各类排序算法,再到面试算法,再到职场应用,书中的主角小灰和大黄带领大家逐个破解。
和一群快乐的小仓鼠共同领悟算法思想、理解算法对内存空间和性能的影响,并开动脑筋去寻求解决问题的尚佳方案。 

内容简介

《labuladong的算法小抄》专攻算法刷题,训练算法思维,应对算法笔试。注重用套路和框架思维解决问题,以不变应万变。第1章列举几个*常见的算法类型以及对应的解题框架思路,包括动态规划、回溯、广度优先搜索及双指针、滑动窗口等算法技巧。第2章用动态规划的通用思路框架解决十几道经典的动态规划问题,例如,正则表达式、背包问题,同时还介绍了如何写状态转移方程,如何进行状态压缩等技巧。第3章介绍了数据结构相关的算法,例如,二叉树相关的题目解法,也包括LRU、LFU这种面试常考的算法原理。第4章介绍回溯算法、广度优先算法等核心套路在算法题中的运用,巩固对算法框架的理解。第5章讲解了一些高频题目,每道题目可能会结合多种算法思路,也可能有多种解法,读完这一章,你就可以独自遨游题海啦。

《labuladong的算法小抄》专攻算法刷题,训练算法思维,应对算法笔试。注重用套路和框架思维解决问题,以不变应万变。第1章列举几个*常见的算法类型以及对应的解题框架思路,包括动态规划、回溯、广度优先搜索及双指针、滑动窗口等算法技巧。第2章用动态规划的通用思路框架解决十几道经典的动态规划问题,例如,正则表达式、背包问题,同时还介绍了如何写状态转移方程,如何进行状态压缩等技巧。第3章介绍了数据结构相关的算法,例如,二叉树相关的题目解法,也包括LRU、LFU这种面试常考的算法原理。第4章介绍回溯算法、广度优先算法等核心套路在算法题中的运用,巩固对算法框架的理解。第5章讲解了一些高频题目,每道题目可能会结合多种算法思路,也可能有多种解法,读完这一章,你就可以独自遨游题海啦。

《漫画算法》通过主人公小灰的心路历程,用漫画的形式讲述了算法和数据结构的基础知识,复杂多变的算法面试题目及算法的实际应用场景。首先介绍了算法和数据结构的总体概念,告诉大家算法是什么,数据结构又是什么,都有哪些用途,如何分析时间复杂度,如何分析空间复杂度。第二章 介绍了*基本的数据结构,包括数组、链表、栈、队列、哈希表的概念和读写操作。第三章 介绍了树和二叉树的概念、二叉树的各种遍历方式、二叉树的特殊形式二叉堆和优先队列的应用。第四章 介绍了几种典型的排序算法,包括冒泡排序、快速排序、堆排序、计数排序、桶排序。第五章 介绍了十余种职场上流行的算法面试题目及详细的解题思路。例如怎样判断链表有环、怎样计算大整数加法等。第六章 介绍了算法在职场上的一些应用,例如使用LRU算法来淘汰冷数据,使用Bitmap算法来统计用户特征等。

作者简介

魏梦舒,微信公众号@程序员小灰的作者,多年的软件行业从业经验,先后在京东金融和摩拜科技从事算法和研发相关工作,对算法有着深入的研究。

labuladong的算法小抄+漫画算法(套装共2册) PDF下载

目录

《labuladong的算法小抄》

第1章 核心套路篇 / 21
1.1 学习算法和刷题的框架思维 / 21
1.1.1 数据结构的存储方式 / 21
1.1.2 数据结构的基本操作 / 23
1.1.3 算法刷题指南 / 25
1.1.4 最后总结 / 30
1.2 动态规划解题套路框架 / 31
1.2.1 斐波那契数列 / 32
1.2.2 凑零钱问题 / 37
1.2.3 最后总结 / 42
1.3 回溯算法解题套路框架 / 43
1.3.1 全排列问题 / 43
1.3.2 N 皇后问题 / 48
1.3.3 最后总结 / 51
1.4 BFS 算法套路框架 / 53
1.4.1 算法框架 / 53
1.4.2 二叉树的最小高度 / 54
1.4.3 解开密码锁的最少次数 / 56
1.5 双指针技巧套路框架 / 64
1.5.1 快、慢指针的常用算法 / 64
1.5.2 左、右指针的常用算法 / 68
1.6 我写了首诗,保你闭着眼睛都能写出二分搜索算法 / 71
1.6.1 二分搜索框架 / 72
1.6.2 寻找一个数(基本的二分搜索) / 73
1.6.3 寻找左侧边界的二分搜索 / 75
1.6.4 寻找右侧边界的二分搜索 / 79
1.6.5 逻辑统一 / 82
1.7 我写了一个模板,把滑动窗口算法变成了默写题 / 85
1.7.1 最小覆盖子串 / 87
1.7.2 字符串排列 / 91
1.7.3 找所有字母异位词 / 93
1.7.4 最长无重复子串 / 94

第2章 动态规划系列 / 96
2.1 动态规划设计:最长递增子序列 / 96
2.1.1 动态规划解法 / 97
2.1.2 二分搜索解法 / 100
2.2 二维递增子序列:信封嵌套问题 / 104
2.2.1 题目概述 / 104
2.2.2 思路分析 / 105
2.2.3 最后总结 / 107
2.3 最大子数组问题 / 108
2.3.1 思路分析 / 108
2.3.2 最后总结 / 110
2.4 动态规划答疑:最优子结构及dp 遍历方向 / 111
2.4.1 最优子结构详解 / 111
2.4.2 dp 数组的遍历方向 / 113
2.5 经典动态规划:最长公共子序列 / 117
2.6 经典动态规划:编辑距离 / 123
2.6.1 思路分析 / 124
2.6.2 代码详解 / 125
2.6.3 动态规划优化 / 129
2.6.4 扩展延伸 / 131
2.7 子序列问题解题模板:最长回文子序列 / 136
2.7.1 两种思路 / 136
2.7.2 最长回文子序列 / 137
2.7.3 代码实现 / 139
2.8 状态压缩:对动态规划进行降维打击 / 141
2.9 以最小插入次数构造回文串 / 148
2.9.1 思路分析 / 148
2.9.2 状态转移方程 / 149
2.9.3 代码实现 / 152
2.10 动态规划之正则表达式 / 155
2.10.1 思路分析 / 155
2.10.2 动态规划解法 / 157
2.11 不同的定义产生不同的解法 / 162
2.11.1 第一种思路 / 162
2.11.2 第二种思路 / 165
2.11.3 最后总结 / 167
2.12 经典动态规划:高楼扔鸡蛋 / 168
2.12.1 解析题目 / 168
2.12.2 思路分析 / 169
2.12.3 疑难解答 / 172
2.13 经典动态规划:高楼扔鸡蛋(进阶) / 173
2.13.1 二分搜索优化 / 173
2.13.2 重新定义状态转移 / 176
2.13.3 还可以再优化 / 180
2.14 经典动态规划:戳气球问题 / 181
2.14.1 回溯思路 / 181
2.14.2 动态规划思路 / 182
2.14.3 写出代码 / 185
2.15 经典动态规划:0-1 背包问题 / 188
2.16 经典动态规划:子集背包问题 / 192
2.16.1 问题分析 / 192
2.16.2 思路分析 / 193
2.16.3 进行状态压缩 / 194
2.17 经典动态规划:完全背包问题 / 196
2.18 题目千百变,套路不会变 / 200
2.18.1 线性排列情况 / 200
2.18.2 环形排列情况 / 203
2.18.3 树形排列情况 / 205
2.19 动态规划和回溯算法,到底是什么关系 / 207
2.19.1 回溯思路 / 207
2.19.2 消除重叠子问题 / 210
2.19.3 动态规划 / 211

第3章 数据结构系列 / 216
3.1 手把手教你写 LRU 缓存淘汰算法 / 216
3.1.1 LRU 算法描述 / 218
3.1.2 LRU 算法设计 / 219
3.1.3 代码实现 / 220
3.2 层层拆解,带你手写LFU 算法 / 227
3.2.1 算法描述 / 227
3.2.2 思路分析 / 228
3.2.3 代码框架 / 230
3.2.4 LFU 核心逻辑 / 232
3.3 二叉搜索树操作集锦 / 235
3.3.1 判断 BST 的合法性 / 236
3.3.2 在 BST 中查找一个数是否存在 / 238
3.3.3 在 BST 中插入一个数 / 239
3.3.4 在 BST 中删除一个数 / 239
3.4 完全二叉树的节点数为什么那么难算 / 243
3.4.1 思路分析 / 244
3.4.2 复杂度分析 / 245
3.5 用各种遍历框架序列化和反序列化二叉树 / 247
3.5.1 题目描述 / 247
3.5.2 前序遍历解法 / 248
3.5.3 后序遍历解法 / 252
3.5.4 中序遍历解法 / 255
3.5.5 层级遍历解法 / 255
3.6 Git 原理之二叉树最近公共祖先 / 260
3.6.1 二叉树的最近公共祖先 / 261
3.6.2 思路分析 / 263
3.7 特殊数据结构:单调栈 / 266
3.7.1 单调栈解题模板 / 266
3.7.2 题目变形 / 268
3.7.3 如何处理循环数组 / 268
3.8 特殊数据结构:单调队列 / 271
3.8.1 搭建解题框架 / 271
3.8.2 实现单调队列数据结构 / 273
3.8.3 算法复杂度分析 / 276
3.9 如何判断回文链表 / 277
3.9.1 判断回文单链表 / 277
3.9.2 优化空间复杂度 / 280
3.9.3 最后总结 / 282
3.10 秀操作之纯递归反转链表 / 283
3.10.1 递归反转整个链表 / 283
3.10.2 反转链表前N 个节点 / 286
3.10.3 反转链表的一部分 / 287
3.10.4 最后总结 / 288
3.11 秀操作之k 个一组反转链表 / 289
3.11.1 分析问题 / 289
3.11.2 代码实现 / 291
3.11.3 最后总结 / 292

第4章 算法思维系列 / 293
4.1 回溯算法解决子集、组合、排列问题 / 293
4.1.1 子集 / 293
4.1.2 组合 / 297
4.1.3 排列 / 299
4.2 回溯算法最佳实践:解数独 / 301
4.2.1 直观感受 / 301
4.2.2 代码实现 / 301
4.3 回溯算法最佳实践:括号生成 / 306
4.4 BFS 算法暴力破解各种智力题 / 310
4.4.1 题目解析 / 311
4.4.2 思路分析 / 311
4.5 2Sum 问题的核心思想 / 315
4.5.1 2Sum I / 315
4.5.2 2Sum II / 316
4.5.3 最后总结 / 318
4.6 一个函数解决 nSum 问题 / 319
4.6.1 2Sum 问题 / 319
4.6.2 3Sum 问题 / 322
4.6.3 4Sum 问题 / 324
4.6.4 100Sum 问题 / 325
4.7 拆解复杂问题:实现计算器 / 328
4.7.1 字符串转整数 / 328
4.7.2 处理加减法 / 329
4.7.3 处理乘除法 / 331
4.7.4 处理括号 / 333
4.7.5 最后总结 / 336
4.8 摊烧饼也得有点递归思维 / 337
4.8.1 思路分析 / 338
4.8.2 代码实现 / 339
4.9 前缀和技巧解决子数组问题 / 341
4.9.1 什么是前缀和 / 341
4.9.2 优化解法 / 343
4.9.3 最后总结 / 344
4.10 扁平化嵌套列表 / 345
4.10.1 题目描述 / 345
4.10.2 解题思路 / 346
4.10.3 进阶思路 / 349

第5章 高频面试 / 351
5.1 如何高效寻找素数 / 351
5.2 如何高效进行模幂运算 / 355
5.2.1 如何处理数组指数 / 355
5.2.2 如何处理 mod 运算 / 356
5.2.3 如何高效求幂 / 358
5.3 如何运用二分搜索算法 / 360
5.3.1 问题分析 / 360
5.3.2 扩展延伸 / 362
5.4 如何高效解决接雨水问题 / 364
5.4.1 核心思路 / 364
5.4.2 备忘录优化 / 366
5.4.3 双指针解法 / 367
5.5 如何去除有序数组的重复元素 / 371
5.6 如何寻找最长回文子串 / 373
5.6.1 思考 / 373
5.6.2 代码实现 / 374
5.7 如何运用贪心思想玩跳跃游戏 / 376
5.7.1 跳跃游戏 I / 376
5.7.2 跳跃游戏 II / 377
5.8 如何运用贪心算法做时间管理 / 381
5.8.1 问题概述 / 381
5.8.2 贪心解法 / 381
5.8.3 应用举例 / 383
5.9 如何判定括号合法性 / 386
5.9.1 处理一种括号 / 386
5.9.2 处理多种括号 / 387
5.10 如何调度考生的座位 / 389
5.10.1 思路分析 / 390
5.10.2 简化问题 / 391
5.10.3 进阶问题 / 393
5.10.4 最后总结 / 395
5.11 Union-Find 算法详解 / 396
5.11.1 问题介绍 / 396
5.11.2 基本思路 / 397
5.11.3 平衡性优化 / 400
5.11.4 路径压缩 / 402
5.11.5 最后总结 / 405
5.12 Union-Find 算法应用 / 407
5.12.1 DFS 的替代方案 / 407
5.12.2 判定合法等式 / 412

《漫画算法》

第1章 算法概述 / 1
1.1 算法和数据结构 / 1
1.1.1 小灰和大黄 / 1
1.1.2 什么是算法 / 3
1.1.3 什么是数据结构 / 7
1.2 时间复杂度 / 8
1.2.1 算法的好与坏 / 8
1.2.2 基本操作执行次数 / 10
1.2.3 渐进时间复杂度 / 12
1.2.4 时间复杂度的巨大差异 / 15
1.3 空间复杂度 / 16
1.3.1 什么是空间复杂度 / 16
1.3.2 空间复杂度的计算 / 19
1.3.3 时间与空间的取舍 / 21
1.4 小结 / 22

第2章 数据结构基础 / 23
2.1 什么是数组 / 23
2.1.1 初识数组 / 23
2.1.2 数组的基本操作 / 26
2.1.3 数组的优势和劣势 / 32
2.2 什么是链表 / 33
2.2.1 “正规军”和“地下党” / 33
2.2.2 链表的基本操作 / 35
2.3 栈和队列 / 42
2.3.1 物理结构和逻辑结构 / 42
2.3.2 什么是栈 / 43
2.3.3 栈的基本操作 / 44
2.3.4 什么是队列 / 45
2.3.5 队列的基本操作 / 46
2.3.6 栈和队列的应用 / 50
2.4 神奇的散列表 / 51
2.4.1 为什么需要散列表 / 51
2.4.2 哈希函数 / 54
2.4.3 散列表的读写操作 / 55
2.5 小结 / 59

第3章 树 / 61
3.1 树和二叉树 / 61
3.1.1 什么是树 / 61
3.1.2 什么是二叉树 / 64
3.1.3 二叉树的应用 / 67
3.2 二叉树的遍历 / 71
3.2.1 为什么要研究遍历 / 71
3.2.2 深度优先遍历 / 73
3.2.3 广度优先遍历 / 84
3.3 什么是二叉堆 / 88
3.3.1 初识二叉堆 / 88
3.3.2 二叉堆的自我调整 / 90
3.3.3 二叉堆的代码实现 / 95
3.4 什么是优先队列 / 98
3.4.1 优先队列的特点 / 98
3.4.2 优先队列的实现 / 99
3.5 小结 / 103

第4章 排序算法 / 105
4.1 引言 / 105
4.2 什么是冒泡排序 / 107
4.2.1 初识冒泡排序 / 107
4.2.2 冒泡排序的优化 / 110
4.2.3 鸡尾酒排序 / 114
4.3 什么是快速排序 / 118
4.3.1 初识快速排序 / 118
4.3.2 基准元素的选择 / 120
4.3.3 元素的交换 / 122
4.3.4 单边循环法 / 125
4.3.5 非递归实现 / 128
4.4 什么是堆排序 / 131
4.4.1 传说中的堆排序 / 131
4.4.2 堆排序的代码实现 / 134
4.5 计数排序和桶排序 / 137
4.5.1 线性时间的排序 / 137
4.5.2 初识计数排序 / 138
4.5.3 计数排序的优化 / 140
4.5.4 什么是桶排序 / 145
4.6 小结 / 149

第5章 面试中的算法 / 150
5.1 踌躇满志的小灰 / 150
5.2 如何判断链表有环 / 151
5.2.1 一场与链表相关的面试 / 151
5.2.2 解题思路 / 155
5.2.3 问题扩展 / 158
5.3 最小栈的实现 / 161
5.3.1 一场关于栈的面试 / 161
5.3.2 解题思路 / 163
5.4 如何求出最大公约数 / 166
5.4.1 一场求最大公约数的面试 / 166
5.4.2 解题思路 / 168
5.5 如何判断一个数是否为2的整数次幂 / 173
5.5.1 一场很“2”的面试 / 173
5.5.2 解题思路 / 175
5.6 无序数组排序后的最大相邻差 / 178
5.6.1 一道奇葩的面试题 / 178
5.6.2 解题思路 / 179
5.7 如何用栈实现队列 / 184
5.7.1 又是一道关于栈的面试题 / 184
5.7.2 解题思路 / 186
5.8 寻找全排列的下一个数 / 191
5.8.1 一道关于数字的题目 / 191
5.8.2 解题思路 / 193
5.9 删去k个数字后的最小值 / 196
5.9.1 又是一道关于数字的题目 / 196
5.9.2 解题思路 / 198
5.10 如何实现大整数相加 / 205
5.10.1 加法,你会不会 / 205
5.10.2 解题思路 / 206
5.11 如何求解金矿问题 / 211
5.11.1 一个关于财富自由的问题 / 211
5.11.2 解题思路 / 213
5.12 寻找缺失的整数 / 223
5.12.1 “五行”缺一个整数 / 223
5.12.2 问题扩展 / 225

第6章 算法的实际应用 / 230
6.1 小灰上班的第1天 / 230
6.2 Bitmap的巧用 / 232
6.2.1 一个关于用户标签的需求 / 232
6.2.2 用算法解决问题 / 234
6.3 LRU算法的应用 / 241
6.3.1 一个关于用户信息的需求 / 241
6.3.2 用算法解决问题 / 243
6.4 什么是A星寻路算法 / 249
6.4.1 一个关于迷宫寻路的需求 / 249
6.4.2 用算法解决问题 / 251
6.5 如何实现红包算法 / 262
6.5.1 一个关于钱的需求 / 262
6.5.2 用算法解决问题 / 264
6.6 算法之路无止境 / 268

 

labuladong的算法小抄+漫画算法(套装共2册) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:labuladong的算法小抄+漫画算法(套装共2册)