书籍详情
《labuladong的算法小抄算法教程书籍专攻算法刷题》[40M]百度网盘|亲测有效|pdf下载
  • labuladong的算法小抄算法教程书籍专攻算法刷题

  • 出版社:天华思文图书专营店
  • 出版时间:2020-11
  • 热度:7697
  • 上架时间:2024-06-30 09:08:33
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍


编辑推荐

适读人群 :本科高年级(大四大三)计算机及相关专业学生,秋招春招前冲刺;初入职场三年内新人

  在你还没有拿得出手的实战项目证明自己能力时,面试官只能拿算法题评估你。力扣算法题因被BAT、京东、美团、字节跳动、滴滴、拼dd、微软、亚马逊、Google、Facebook等一线科技公司选作面试题而名声大噪,不论你是想拿下大厂Offer,还是想在技术道路上走得更远,刷算法题,尤其是刷力扣算法题,无疑是一个高效率的选择。

  简单地会解某一道算法题并不意味着什么,因为很少有人能刷完力扣的上千道题;“小抄”是指不那么正式的笔记,算法小抄把算法题分门别类汇总,提炼出各类题的解题框架,从而以不变应万变。

  《漫画算法》作者@程序员小灰|@stormzhang等KOL力荐。

赠LeetCode力扣Plus会员85折优惠劵。  

用喜闻乐见的语言讲述算法,书中配有几百幅有趣的算法图示,并送上部分动画演示。

内容简介

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

作者简介

  微信公众号labuladong的作者,有多年的刷题经验,希望用通俗的语言帮助广大互联网从业者少走弯路,快速从根本上攻克算法难关,为职业道路的发展赋能。

精彩书评

作为技术人,不管你是想进知名互联网公司,还是想以后在技术的道路上走得远,算法都是必经之路,它决定着技术人发展的上限,所以对于技术人来说,学好算法是非常非常非常必要的,那么,有这个意识之后,这本书,就是你需要的。

——张奇,微信公众号“stormzhang”博主

在国内外各大IT公司的面试流程中,考察候选人算法能力是极其重要的一环。刷算法题既可以提高我们的面试优势,也充分锻炼了我们的逻辑思维能力。labuladong的这本算法小抄,用生动的语言为我们讲解了许多经典的算法题目,对想要提升算法能力的小伙伴很有帮助。

——魏梦舒(@程序员小灰),畅销书《漫画算法》作者,微信公众号“程序员小灰”博主

目录

力扣官网题号及名称 /V

本书约定  / 1

语言基础  / 5

第1章 核心套路篇 / 211.1 学习算法和刷题的框架思维 / 211.1.1 数据结构的存储方式 / 211.1.2 数据结构的基本操作 / 231.1.3 算法刷题指南 / 251.1.4 Z后总结 / 301.2 动态规划解题套路框架 / 311.2.1 斐波那契数列 / 321.2.2 凑零钱问题 / 371.2.3 Z后总结 / 421.3 回溯算法解题套路框架 / 431.3.1 全排列问题 / 431.3.2 N 皇后问题 / 481.3.3 Z后总结 / 511.4 BFS 算法套路框架 / 531.4.1 算法框架 / 531.4.2 二叉树的Z小高度 / 541.4.3 解开密码锁的Z少次数 / 561.5 双指针技巧套路框架 / 641.5.1 快、慢指针的常用算法 / 641.5.2 左、右指针的常用算法 / 681.6 我写了首诗,保你闭着眼睛都能写出二分搜索算法 / 711.6.1 二分搜索框架 / 721.6.2 寻找一个数(基本的二分搜索) / 731.6.3 寻找左侧边界的二分搜索 / 751.6.4 寻找右侧边界的二分搜索 / 791.6.5 逻辑统一 / 821.7 我写了一个模板,把滑动窗口算法变成了默写题 / 851.7.1 Z小覆盖子串 / 871.7.2 字符串排列 / 911.7.3 找所有字母异位词 / 931.7.4 Z长无重复子串 / 94第2章 动态规划系列 / 962.1 动态规划设计:Z长递增子序列 / 962.1.1 动态规划解法 / 972.1.2 二分搜索解法 / 1002.2 二维递增子序列:信封嵌套问题 / 1042.2.1 题目概述 / 1042.2.2 思路分析 / 1052.2.3 Z后总结 / 1072.3 Z大子数组问题 / 1082.3.1 思路分析 / 1082.3.2 Z后总结 / 1102.4 动态规划答疑:Z优子结构及dp 遍历方向 / 1112.4.1 Z优子结构详解 / 1112.4.2 dp 数组的遍历方向 / 1132.5 经典动态规划:Z长公共子序列 / 1172.6 经典动态规划:编辑距离 / 1232.6.1 思路分析 / 1242.6.2 代码详解 / 1252.6.3 动态规划优化 / 1292.6.4 扩展延伸 / 1312.7 子序列问题解题模板:Z长回文子序列 / 1362.7.1 两种思路 / 1362.7.2 Z长回文子序列 / 1372.7.3 代码实现 / 1392.8 状态压缩:对动态规划进行降维打击 / 1412.9 以Z小插入次数构造回文串 / 1482.9.1 思路分析 / 1482.9.2 状态转移方程 / 1492.9.3 代码实现 / 1522.10 动态规划之正则表达式 / 1552.10.1 思路分析 / 1552.10.2 动态规划解法 / 1572.11 不同的定义产生不同的解法 / 1622.11.1 第一种思路 / 1622.11.2 第二种思路 / 1652.11.3 Z后总结 / 1672.12 经典动态规划:高楼扔鸡蛋 / 1682.12.1 解析题目 / 1682.12.2 思路分析 / 1692.12.3 疑难解答 / 1722.13 经典动态规划:高楼扔鸡蛋(进阶) / 1732.13.1 二分搜索优化 / 1732.13.2 重新定义状态转移 / 1762.13.3 还可以再优化 / 1802.14 经典动态规划:戳气球问题 / 1812.14.1 回溯思路 / 1812.14.2 动态规划思路 / 1822.14.3 写出代码 / 1852.15 经典动态规划:0-1 背包问题 / 1882.16 经典动态规划:子集背包问题 / 1922.16.1 问题分析 / 1922.16.2 思路分析 / 1932.16.3 进行状态压缩 / 1942.17 经典动态规划:完全背包问题 / 1962.18 题目千百变,套路不会变 / 2002.18.1 线性排列情况 / 2002.18.2 环形排列情况 / 2032.18.3 树形排列情况 / 2052.19 动态规划和回溯算法,到底是什么关系 / 2072.19.1 回溯思路 / 2072.19.2 消除重叠子问题 / 2102.19.3 动态规划 / 211第3章 数据结构系列 / 2163.1 手把手教你写 LRU 缓存淘汰算法 / 2163.1.1 LRU 算法描述 / 2183.1.2 LRU 算法设计 / 2193.1.3 代码实现 / 2203.2 层层拆解,带你手写LFU 算法 / 2273.2.1 算法描述 / 2273.2.2 思路分析 / 2283.2.3 代码框架 / 2303.2.4 LFU 核心逻辑 / 2323.3 二叉搜索树操作集锦 / 2353.3.1 判断 BST 的合法性 / 2363.3.2 在 BST 中查找一个数是否存在 / 2383.3.3 在 BST 中插入一个数 / 2393.3.4 在 BST 中删除一个数 / 2393.4 完全二叉树的节点数为什么那么难算 / 2433.4.1 思路分析 / 2443.4.2 复杂度分析 / 2453.5 用各种遍历框架序列化和反序列化二叉树 / 2473.5.1 题目描述 / 2473.5.2 前序遍历解法 / 2483.5.3 后序遍历解法 / 2523.5.4 中序遍历解法 / 2553.5.5 层级遍历解法 / 2553.6 Git 原理之二叉树Z近公共祖先 / 2603.6.1 二叉树的Z近公共祖先 / 2613.6.2 思路分析 / 2633.7 特殊数据结构:单调栈 / 2663.7.1 单调栈解题模板 / 2663.7.2 题目变形 / 2683.7.3 如何处理循环数组 / 2683.8 特殊数据结构:单调队列 / 2713.8.1 搭建解题框架 / 2713.8.2 实现单调队列数据结构 / 2733.8.3 算法复杂度分析 / 2763.9 如何判断回文链表 / 2773.9.1 判断回文单链表 / 2773.9.2 优化空间复杂度 / 2803.9.3 Z后总结 / 2823.10 秀操作之纯递归反转链表 / 2833.10.1 递归反转整个链表 / 2833.10.2 反转链表前N 个节点 / 2863.10.3 反转链表的一部分 / 2873.10.4 Z后总结 / 2883.11 秀操作之k 个一组反转链表 / 2893.11.1 分析问题 / 2893.11.2 代码实现 / 2913.11.3 Z后总结 / 292第4章 算法思维系列 / 2934.1 回溯算法解决子集、组合、排列问题 / 2934.1.1 子集 / 2934.1.2 组合 / 2974.1.3 排列 / 2994.2 回溯算法Z佳实践:解数独 / 3014.2.1 直观感受 / 3014.2.2 代码实现 / 3014.3 回溯算法Z佳实践:括号生成 / 3064.4 BFS 算法暴力破解各种智力题 / 3104.4.1 题目解析 / 3114.4.2 思路分析 / 3114.5 2Sum 问题的核心思想 / 3154.5.1 2Sum I / 3154.5.2 2Sum II / 3164.5.3 Z后总结 / 3184.6 一个函数解决 nSum 问题 / 3194.6.1 2Sum 问题 / 3194.6.2 3Sum 问题 / 3224.6.3 4Sum 问题 / 3244.6.4 100Sum 问题 / 3254.7 拆解复杂问题:实现计算器 / 3284.7.1 字符串转整数 / 3284.7.2 处理加减法 / 3294.7.3 处理乘除法 / 3314.7.4 处理括号 / 3334.7.5 Z后总结 / 3364.8 摊烧饼也得有点递归思维 / 3374.8.1 思路分析 / 3384.8.2 代码实现 / 3394.9 前缀和技巧解决子数组问题 / 3414.9.1 什么是前缀和 / 3414.9.2 优化解法 / 3434.9.3 Z后总结 / 3444.10 扁平化嵌套列表 / 3454.10.1 题目描述 / 3454.10.2 解题思路 / 3464.10.3 进阶思路 / 349第5章 高频面试系列 / 3515.1 如何高效寻找素数 / 3515.2 如何高效进行模幂运算 / 3555.2.1 如何处理数组指数 / 3555.2.2 如何处理 mod 运算 / 3565.2.3 如何高效求幂 / 3585.3 如何运用二分搜索算法 / 3605.3.1 问题分析 / 3605.3.2 扩展延伸 / 3625.4 如何高效解决接雨水问题 / 3645.5 如何去除有序数组的重复元素 / 3715.6 如何寻找Z长回文子串 / 3735.7 如何运用贪心思想玩跳跃游戏 / 3765.8 如何运用贪心算法做时间管理 / 3815.9 如何判定括号合法性 / 3865.10 如何调度考生的座位 / 3895.11 Union-Find 算法详解 / 396


前言/序言

前言

数据结构和算法在计算机知识体系中有着举足轻重的作用,这块知识也有非常经典的教材供我们学习。但是,我们刷的算法题往往会在经典的算法思想之上套层“皮”,所以很容易让人产生一种感觉:数据结构和算法我以前学得挺好的,为啥这些算法题我完全没思路呢?

面对这种疑惑,有人可能会摆出好几本与算法相关的大部头,建议你去进修。

有些书确实很经典,但我觉得咱应该搞清楚自己的目的是什么。如果你是学生,对算法有浓厚的兴趣,甚至说以后准备搞这方面的研究,那我觉得你可以去啃一啃大部头;但事实是,大部分人(包括我)学习算法是为了应对考试,这种情况下去啃大部头显然就得不偿失了,更高效的方法是直接刷题。

但是,刷题也是有技巧的,刷题平台上动辄几千道题,难道你要全刷完吗?Z高效的刷题方式是边刷边归纳总结,抽象出每种题型的套路框架,以不变应万变。

我个人还是挺喜欢刷题的,经过长时间的积累、总结,沉淀出了这本书,希望能给你带来思路上的启发和指导。

本书特色

本书会先帮你抽象总结出框架套路,然后通过题目实践,这应该是Z高效的学习方式。即学即用,立即反馈,相信本书会让你一读就停不下来。

本书定位

这不是一本数据结构和算法的入门书,而是一本刷算法题的参考书。

本书的目的是手把手带你刷题,每看完一节内容,就可以去刷几道题,知其然,也知其所以然。