万本电子书0元读

万本电子书0元读

顶部广告

算法面试电子书

本书适合于需要行算法面试的读者,通过阅读本书可以掌握算法面试中求解问题的方法和技巧,提升自己的算法技能和思维方式,从而在面试中脱颖而出。同时,本书可以作为“数据结构”和“算法设计与分析”课程的辅导书,也可以供各种程序设计竞赛和计算机编程爱好者研习。

售       价:¥

纸质售价:¥99.00购买纸书

15人正在读 | 0人评论 6.4

作       者:李春葆 李筱驰

出  版  社:清华大学出版社有限公司

出版时间:2024-10-01

字       数:51.7万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书旨在帮助读者更好地应对算法面试,提高算法和编程能力。书中按专题精选了LeetCode平台的一系列的热算法题,并详细解释其求解思路和过程。全书分为三个部分,第Ⅰ部分为数据结构及其应用,以常用数据结构为主题,深讲解各种数据结构的应用方法和技巧。第Ⅱ部分为算法策略及其应用,以基本算法设计方法和算法设计策略为主题,深讲解各种算法设计策略的应用方法和技巧。第Ⅲ部分为经典问题及其求解,以实际中的一些问题为主题,深讲解这些问题多种求解方法。 本书适合于需要行算法面试的读者,通过阅读本书可以掌握算法面试中求解问题的方法和技巧,提升自己的算法技能和思维方式,从而在面试中脱颖而出。同时可以作为《数据结构》和《算法设计与分析》课程的辅导书,也可以供各种程序设计竞赛和计算机编程爱好者研习。 目录<br/>【推荐语】<br/>本书适合于需要行算法面试的读者,通过阅读本书可以掌握算法面试中求解问题的方法和技巧,提升自己的算法技能和思维方式,从而在面试中脱颖而出。同时,本书可以作为“数据结构”和“算法设计与分析”课程的辅导书,也可以供各种程序设计竞赛和计算机编程爱好者研习。<br/>【作者】<br/>李春葆,计算机学院教授,主要研究方向:数据挖掘、人工智能和软件工程。发表论文30余篇,主持和参加多项科研课题。著作教材多部。从事近30年C/C 语言、数据结构和算法设计等课程的第一线本科教学工作,具备丰富的教学经验,曾参与深圳名企的笔试和面试题库建设。<br/>
目录展开

内容简介

作者简介

前言

目录

算法面试(上册)

第一部分 数据结构及其应用

第1章 数组

1.1 数组概述

1.1.1 数组的定义

1.1.2 数组的知识点

1.2 数组的基本算法设计

1.2.1 LeetCode27——移除元素★

1.2.2 LeetCode283——移动0★

1.2.3 LeetCode2460——对数组执行操作★

1.2.4 LeetCode75——颜色的分类★★

1.2.5 LeetCode189——轮转数组★★

1.3 有序数组的算法设计

1.3.1 LeetCode26——删除有序数组中的重复项★

1.3.2 LeetCode80——删除有序数组中的重复项Ⅱ★★

1.3.3 LeetCode1287——有序数组中出现次数超过元素总数25%的元素★

1.3.4 LeetCode1200——最小绝对差★

1.3.5 LeetCode88——合并两个有序数组★

1.3.6 LeetCode349——两个数组的交集★

1.3.7 LeetCode977——有序数组的平方★

1.3.8 LeetCode1470——重新排列数组★

1.3.9 LeetCode1213——3个有序数组的交集★

1.3.10 LeetCode264——丑数Ⅱ★★

1.3.11 LeetCode373——查找和最小的k对数字★★

推荐练习题

第2章 链表

2.1 链表概述

2.1.1 链表的定义

2.1.2 链表的知识点

2.2 链表基本操作的算法设计

2.2.1 LeetCode203——移除链表元素★

2.2.2 LeetCode206——反转链表★

2.2.3 LeetCode328——奇偶链表★★

2.2.4 LeetCode61——旋转链表★★

2.2.5 LeetCode141——环形链表★

2.2.6 LeetCode138——复制带随机指针的链表★★

2.2.7 LeetCode707——设计链表★★

2.3 链表的分组算法设计

2.3.1 LeetCode92——反转链表Ⅱ★★

2.3.2 LeetCode24——两两交换链表中的结点★★

2.3.3 LeetCode25——k个一组翻转链表★★★

2.4 有序链表的算法设计

2.4.1 LeetCode83——删除排序链表中的重复元素★

2.4.2 LeetCode82——删除排序链表中的重复元素Ⅱ★★

2.4.3 LeetCode21——合并两个有序链表★

2.4.4 LeetCode23——合并k个有序链表★★★

2.4.5 LeetCode1634——求两个多项式链表的和★★

推荐练习题

第3章 栈

3.1 栈概述

3.1.1 栈的定义

3.1.2 栈的知识点

3.2 扩展栈的算法设计

3.2.1 LeetCode1381——设计一个支持增量操作的栈★★

3.2.2 LeetCode155——最小栈★

3.2.3 LeetCode716——最大栈★★★

3.3 栈应用的算法设计

3.3.1 LeetCode1544——整理字符串★★

3.3.2 LeetCode71——简化路径★★

3.3.3 LeetCode1441——用栈操作构建数组★

3.3.4 LeetCode946——验证栈序列★★

3.3.5 LeetCode20——有效的括号★

3.3.6 LeetCode1249——删除无效的括号★★

3.3.7 LeetCode32——最长的有效括号子串的长度★★★

3.4 单调栈应用的算法设计

3.4.1 LeetCode503——下一个更大元素Ⅱ★★

3.4.2 LeetCode496——下一个更大元素Ⅰ★

3.4.3 LeetCode739——每日温度★★

3.4.4 LeetCode316——去除重复字母★★

3.4.5 LeetCode84——柱状图中最大的矩形★★★

3.4.6 LeetCode42——接雨水★★★

推荐练习题

第4章 队列和双端队列

4.1 队列和双端队列概述

4.1.1 队列和双端队列的定义

4.1.2 队列和双端队列的知识点

4.2 扩展队列的设计

4.2.1 LeetCode622——设计循环队列★★

4.2.2 LeetCode641——设计循环双端队列★★

4.2.3 LeetCode1670——设计前中后队列★★

4.2.4 LeetCode232——用栈实现队列★

4.3 队列的应用

4.3.1 LeetCode1700——无法吃午餐的学生的数量★

4.3.2 LeetCode933——最近的请求次数★

4.3.3 LeetCode225——用队列实现栈★

4.3.4 LeetCode281——锯齿迭代器★★

4.3.5 LeetCode1047——删除字符串中所有的相邻重复项★

4.4 单调队列

4.4.1 LeetCode239——滑动窗口的最大值★★★

4.4.2 LeetCode1438——绝对差不超过限制的最长连续子数组★★

4.4.3 LCR184——设计自助结算系统★★

推荐练习题

第5章 哈希表

5.1 哈希表概述

5.1.1 哈希表的定义

5.1.2 哈希表的知识点

5.2 哈希表的实现

5.2.1 LeetCode705——设计哈希集合★

5.2.2 LeetCode706——设计哈希映射★

5.3 哈希集合应用的算法设计

5.3.1 LeetCode349——两个数组的交集★

5.3.2 LeetCode202——快乐数★

5.3.3 LeetCode217——存在重复元素★

5.3.4 LeetCode379——电话目录管理系统★★

5.3.5 LeetCode128——最长连续序列★★

5.3.6 LeetCode41——缺失的第一个正数★★★

5.3.7 LeetCode1436——旅行终点站★

5.4 哈希映射应用的算法设计

5.4.1 LeetCode350——两个数组的交集Ⅱ★

5.4.2 LeetCode1460——通过翻转子数组使两个数组相等★

5.4.3 LeetCode383——赎金信★

5.4.4 LeetCode347——前k个高频元素★★

5.4.5 LeetCode242——有效的字母异位词★

5.4.6 LeetCode205——同构字符串★

5.4.7 LeetCode1——两数之和★

5.4.8 LeetCode219——存在重复元素Ⅰ★

5.4.9 LeetCode49——字母异位词的分组★★

5.4.10 LeetCode249——移位字符串的分组★★

推荐练习题

第6章 二叉树

6.1 二叉树概述

6.1.1 二叉树的定义

6.1.2 二叉树的知识点

6.2 二叉树先序、中序和后序遍历应用的算法设计

6.2.1 LeetCode144——二叉树的先序遍历★

6.2.2 LeetCode94——二叉树的中序遍历★

6.2.3 LeetCode145——二叉树的后序遍历★

6.2.4 LeetCode965——单值二叉树★

6.2.5 LeetCode100——相同的树★

6.2.6 LeetCode572——另一棵树的子树★

6.2.7 LeetCode543——二叉树的直径★

6.2.8 LeetCode563——二叉树的坡度★

6.2.9 LeetCode2331——计算二叉树的布尔运算值★

6.2.10 LeetCode199——二叉树的右视图★★

6.2.11 LeetCode662——二叉树的最大宽度★★

6.3 二叉树层次遍历应用的算法设计

6.3.1 LeetCode102——二叉树的层次遍历★★

6.3.2 LeetCode199——二叉树的右视图★★

6.3.3 LeetCode637——二叉树的层平均值★

6.3.4 LeetCode2471——逐层排序二叉树所需的最少操作数目★★

6.3.5 LeetCode2415——反转二叉树的奇数层★★

6.3.6 LeetCode1602——找二叉树中最近的右侧结点★★

6.4 构造二叉树的算法设计

6.4.1 LeetCode105——由先序与中序遍历序列构造二叉树★★

6.4.2 LeetCode106——由中序与后序遍历序列构造二叉树★★

6.4.3 LeetCode2196——根据描述创建二叉树★★

6.5 二叉树序列化的算法设计

6.5.1 LeetCode297——二叉树的序列化与反序列化★★★

6.5.2 LeetCode100——相同的树★

6.5.3 LeetCode572——另一棵树的子树★

推荐练习题

第7章 二叉搜索树

7.1 二叉搜索树概述

7.1.1 二叉搜索树的定义

7.1.2 二叉搜索树的知识点

7.2 二叉搜索树基本操作的算法设计

7.2.1 LeetCode1008——先序遍历构造二叉搜索树★★

7.2.2 LeetCode700——二叉搜索树中的搜索★

7.2.3 LeetCode701——二叉搜索树中的插入操作★★

7.2.4 LeetCode450——删除二叉搜索树中的结点★★

7.3 二叉搜索树特性的算法设计

7.3.1 LeetCode270——最接近的二叉搜索树值★

7.3.2 LeetCode235——二叉搜索树的最近公共祖先★★

7.3.3 LeetCode938——二叉搜索树的范围和★

7.3.4 LeetCode669——修剪二叉搜索树★★

7.3.5 LeetCode776——拆分二叉搜索树★★

7.3.6 LeetCode285——二叉搜索树中的中序后继★★

7.3.7 LeetCode255——验证先序遍历序列二叉搜索树★★

7.4 二叉搜索树基于中序遍历的算法设计

7.4.1 LeetCode783——二叉搜索树结点的最小距离★

7.4.2 LeetCode230——二叉搜索树中第k小的元素★★

7.4.3 LeetCode98——验证二叉搜索树★★

7.4.4 LeetCode538——把二叉搜索树转换为累加树★★

7.4.5 LeetCode99——恢复二叉搜索树★★

7.4.6 LeetCode173——二叉搜索树迭代器★★

7.4.7 LeetCode272——最接近的二叉搜索树值Ⅱ★★★

推荐练习题

第8章 平衡二叉树

8.1 平衡二叉树概述

8.1.1 平衡二叉树的定义

8.1.2 平衡二叉树的知识点

8.2 构造平衡二叉树的算法设计

8.2.1 LeetCode108——将有序数组转换为平衡二叉树★

8.2.2 LeetCode109——将有序链表转换为平衡二叉树★★

8.2.3 LeetCode1382——将二叉搜索树转换为平衡二叉树★★

8.3 平衡树集合应用的算法设计

8.3.1 LeetCode506——相对名次★

8.3.2 LeetCode414——第三大的数★

8.3.3 LeetCode855——考场就座★★

8.3.4 LeetCode2353——设计食物评分系统★★

8.4 平衡树映射应用的算法设计

8.4.1 LeetCode846——一手顺子★★

8.4.2 LeetCode981——基于时间的键值存储★★

8.4.3 LeetCode1912——设计电影租借系统★★★

推荐练习题

第9章 优先队列

9.1 优先队列概述

9.1.1 优先队列的定义

9.1.2 优先队列的知识点

9.2 优先队列的实现

9.2.1 LeetCode912——排序数组★★

9.2.2 LeetCode215——数组中第k个最大的元素★★

9.2.3 LeetCode506——相对名次★

9.3 优先队列应用的算法设计

9.3.1 LeetCode703——数据流中第k大的元素★

9.3.2 LeetCode373——查找和最小的k对数字★★

9.3.3 LeetCode23——合并k个有序链表★★★

9.3.4 LeetCode239——滑动窗口的最大值★★★

9.3.5 LeetCode1383——最大的团队表现值★★★

9.3.6 LeetCode2462——雇佣k位工人的总代价★★

推荐练习题

第10章 并查集

10.1 并查集概述

10.1.1 并查集的定义

10.1.2 并查集的实现

10.1.3 带权并查集

10.2 一维并查集应用的算法设计

10.2.1 LeetCode261——以图判树★★

10.2.2 LeetCode323——无向图中连通分量的数目★★

10.2.3 LeetCode684——冗余连接★★

10.2.4 LeetCode785——判断二分图★★

10.2.5 LeetCode990——等式方程的可满足性★★

10.2.6 LeetCode1061——按字典序排列最小的等价字符串★★

10.2.7 LeetCode947——移除最多的同行或同列石头★★

10.3 二维并查集

10.3.1 LeetCode200——岛屿的数量★★

10.3.2 LeetCode1559——在二维网格图中探测环★★

10.4 带权并查集

10.4.1 LeetCode695——最大岛屿的面积★★

10.4.2 LeetCode128——最长连续序列★★

10.4.3 LeetCode1254——统计封闭岛屿的数目★★

10.4.4 LeetCode399——除法求值★★

推荐练习题

第11章 前缀和与差分

11.1 前缀和与差分概述

11.1.1 前缀和

11.1.2 差分

11.2 一维前缀和应用的算法设计

11.2.1 LeetCode724——寻找数组的中心下标★

11.2.2 LeetCode238——除自身以外数组的乘积★★

11.2.3 LeetCode1749——任意子数组和的绝对值的最大值★★

11.2.4 LeetCode1524——和为奇数的子数组的数目★★

11.2.5 LeetCode560——和为k的子数组★★

11.2.6 LeetCode325——和等于k的最长子数组的长度★★

11.2.7 LeetCode523——连续子数组和★★

11.2.8 LeetCode53——最大子数组和★★

11.3 二维前缀和应用的算法设计

11.3.1 LeetCode304——二维区域和检索(矩阵不可变)★★

11.3.2 LeetCode1074——元素和为目标值的子矩阵的数量★★★

11.3.3 面试题17.24——最大子矩阵★★★

11.4 差分数组应用的算法设计

11.4.1 LeetCode370——区间加法★★

11.4.2 LeetCode1109——航班预订统计★★

11.4.3 LeetCode2536——子矩阵元素加1★★

推荐练习题

第12章 线段树

12.1 线段树概述

12.1.1 线段树的定义

12.1.2 简单线段树的实现

12.1.3 复杂线段树的实现

12.1.4 线段树的动态开点实现

12.1.5 离散化

12.2 简单线段树应用的算法设计

12.2.1 LeetCode303——区域和检索(数组不可变)★

12.2.2 LeetCode308——二维区域和检索(可改)★★★

12.2.3 LeetCode327——区间和的个数★★★

12.3 复杂线段树应用的算法设计

12.3.1 LeetCode715——Range模块★★★

12.3.2 LeetCode1622——奇妙序列★★★

12.4 离散化在线段树中的应用

12.4.1 LeetCode327——区间和的个数★★★

12.4.2 LeetCode315——计算右侧小于当前元素的个数★★★

推荐练习题

第13章 树状数组

13.1 树状数组概述

13.1.1 树状数组的定义

13.1.2 树状数组的实现

13.2 树状数组应用的算法设计

13.2.1 LeetCode1649——通过指令创建有序数组★★★

13.2.2 LeetCode1409——查询带键的排列★★

13.2.3 LeetCode683——k个关闭的灯泡★★★

13.2.4 LeetCode308——二维区域和检索(可改)★★★

13.3 离散化在树状数组中的应用

13.3.1 LeetCode327——区间和的个数★★★

13.3.2 LeetCode315——计算右侧小于当前元素的个数★★★

推荐练习题

第14章 字典树和后缀数组

14.1 字典树和后缀数组概述

14.1.1 字典树

14.1.2 后缀数组

14.2 字典树应用的算法设计

14.2.1 LeetCode208——实现Trie(前缀树)★★

14.2.2 LeetCode14——最长公共前缀★

14.2.3 LeetCode648——单词替换★★

14.2.4 LeetCode677——键值映射★★

14.2.5 LeetCode792——匹配子序列的单词数★★

14.3 后缀数组应用的算法设计

14.3.1 LeetCode1698——字符串的不同子串的个数★★

14.3.2 LeetCode1044——最长重复子串★★★

推荐练习题

算法面试(下册)

第二部分 算法设计策略及其应用

第15章 穷举法

15.1 穷举法概述

15.1.1 什么是穷举法

15.1.2 顺序列举设计方法

15.1.3 组合列举设计方法

15.1.4 排列列举设计方法

15.2 顺序列举的算法设计

15.2.1 LeetCode485——1的最多连续个数★

15.2.2 LeetCode1464——数组中两个元素的最大乘积★

15.2.3 LeetCode829——连续整数求和★★★

15.2.4 LeetCode17——电话号码的字母组合★★

15.2.5 LeetCode845——数组中的最长山脉★★

15.2.6 LeetCode209——长度最小的子数组★★

15.2.7 LeetCode134——加油站★★

15.3 组合列举的算法设计

15.3.1 LeetCode78——子集★★

15.3.2 LeetCode90——子集Ⅱ★★

15.3.3 LeetCode77——组合★★

15.3.4 LeetCode1863——求出所有子集的异或总和再求和★

15.4 排列列举的算法设计

15.4.1 LeetCode46——全排列★★

15.4.2 LeetCode60——排列序列★★★

15.4.3 LeetCode52——n皇后Ⅱ★★★

推荐练习题

第16章 递归

16.1 递归概述

16.1.1 递归的定义

16.1.2 递归模型

16.1.3 递归的执行过程

16.1.4 递归算法的设计

16.1.5 使用递归的注意事项

16.2 基于递归数据结构的递归算法设计

16.2.1 LeetCode2487——从链表中移除结点★★

16.2.2 LeetCode21——合并两个有序链表★

16.2.3 LeetCode814——二叉树的剪支★★

16.2.4 LeetCode236——二叉树的最近公共祖先★★

16.2.5 LeetCode114——将二叉树展开为链表★★

16.3 基于归纳的递归算法设计

16.3.1 LeetCode17——电话号码的字母组合★★

16.3.2 LeetCode191——位1的个数★

16.3.3 LeetCode231——2的幂★

16.3.4 LeetCode394——字符串解码★★

推荐练习题

第17章 分治法

17.1 分治法概述

17.1.1 什么是分治法

17.1.2 二分查找及其扩展算法

17.2 基本分治算法设计

17.2.1 LeetCode169——多数元素★

17.2.2 LeetCode53——最大子数组和★★

17.2.3 LeetCode241——为运算表达式设计优先级★★

17.2.4 LeetCode95——不同的二叉搜索树Ⅱ★★

17.3 快速排序和二路归并排序应用的算法设计

17.3.1 LeetCode912——排序数组★★

17.3.2 LeetCode215——数组中第k大的元素★★

17.3.3 LeetCode315——计算右侧小于当前元素的个数★★★

17.3.4 LeetCode493——翻转对★★★

17.4 二分查找应用的算法设计

17.4.1 LeetCode69——x的平方根★

17.4.2 LeetCode167——有序数组中的两数之和Ⅱ★★

17.4.3 LeetCode74——搜索二维矩阵★★

17.4.4 LeetCode4——寻找两个正序数组的中位数★★★

17.4.5 LeetCode744——寻找比目标字母大的最小字母★

17.4.6 LeetCode153——寻找旋转排序数组中的最小值★★

17.4.7 LeetCode33——搜索旋转排序数组★★

17.4.8 LeetCode81——搜索旋转排序数组Ⅱ★★

17.4.9 LeetCode315——计算右侧小于当前元素的个数★★★

17.4.10 LeetCode493——翻转对★★★

17.4.11 LeetCode215——数组中第k大的元素★★

17.4.12 LeetCode378——有序矩阵中第k小的元素★★

17.4.13 LeetCode410——分割数组的最大值★★★

17.4.14 LeetCode1011——在D天内送达包裹的能力★★

推荐练习题

第18章 DFS、BFS 和拓扑排序

18.1 DFS、BFS和拓扑排序概述

18.1.1 深度优先搜索

18.1.2 广度优先搜索

18.1.3 拓扑排序

18.2 深度优先遍历应用的算法设计

18.2.1 LeetCode200——岛屿的数量★★

18.2.2 LeetCode463——岛屿的周长★

18.2.3 LeetCode130——被围绕的区域★★

18.2.4 LeetCode529——扫雷游戏★★

18.2.5 LeetCode365——水壶问题★★

18.2.6 LeetCode332——重新安排行程★★★

18.3 广度优先遍历应用的算法设计

18.3.1 LeetCode200——岛屿的数量★★

18.3.2 LeetCode130——被围绕的区域★★

18.3.3 LeetCode529——扫雷游戏★★

18.3.4 LeetCode365——水壶问题★★

18.3.5 LeetCode1162——地图分析★★

18.3.6 LeetCode847——访问所有结点的最短路径★★★

18.3.7 LeetCode2608——图中的最短环★★★

18.3.8 LeetCode2204——无向图中到环的距离★★★

18.3.9 LeetCode127——单词接龙★★★

18.3.10 LeetCode934——最短的桥★★

18.4 拓扑排序应用的算法设计

18.4.1 LeetCode1462——课程安排Ⅳ★★

18.4.2 LeetCode802——找到最终的安全状态★★

18.4.3 LeetCode269——火星词典★★★

推荐练习题

第19章 回溯法

19.1 回溯法概述

19.1.1 什么是回溯法

19.1.2 回溯法的算法设计

19.2 子集树的回溯算法设计

19.2.1 LeetCode78——子集★★

19.2.2 LeetCode77——组合★★

19.2.3 LeetCode40——组合总和Ⅱ★★

19.2.4 LeetCode39——组合总和★★

19.2.5 LeetCode90——子集Ⅱ★★

19.2.6 LeetCode216——组合总和Ⅲ★★

19.2.7 LeetCode491——递增子序列★★

19.2.8 LeetCode131——分割回文串★★

19.2.9 LeetCode93——复原IP地址★★

19.2.10 LeetCode282——给表达式添加运算符★★★

19.2.11 LeetCode22——括号的生成★★

19.2.12 LeetCode301——删除无效的括号★★★

19.2.13 LeetCode17——电话号码的字母组合★★

19.2.14 LeetCode79——单词的搜索★★

19.2.15 LeetCode797——所有可能的路径★★

19.2.16 LeetCode332——重新安排行程★★★

19.2.17 LeetCode37——解数独★★★

19.2.18 LeetCode679——24点游戏★★★

19.2.19 LeetCode1723——完成所有工作的最短时间★★★

19.3 排列树的回溯算法设计

19.3.1 LeetCode46——全排列★★

19.3.2 LeetCode47——全排列Ⅱ★★

19.3.3 LeetCode60——排列序列★★★

19.3.4 LeetCode51——n皇后★★★

推荐练习题

第20章 分支限界法和A~*算法

20.1 分支限界法和A~*算法概述

20.1.1 分支限界法

20.1.2 A~*算法

20.2 队列式分支限界法应用的算法设计

20.2.1 LeetCode1376——通知所有员工所需的时间★★

20.2.2 LeetCode743——网络延迟时间★★

20.2.3 LeetCode787——k站中转内最便宜的航班★★

20.2.4 LeetCode1293——网格中的最短路径★★★

20.2.5 LeetCode1102——得分最高的路径★★

20.3 优先队列式分支限界法应用的算法设计

20.3.1 LeetCode743——网络延迟时间★★

20.3.2 LeetCode787——k站中转内最便宜的航班★★

20.3.3 LeetCode1293——网格中的最短路径★★★

20.3.4 LeetCode2473——购买苹果的最低成本★★

20.3.5 LeetCode1102——得分最高的路径★★

20.3.6 LeetCode1723——完成所有工作的最短时间★★★

20.4 A~*算法的应用

20.4.1 LeetCode773——滑动谜题★★★

20.4.2 LeetCode752——打开转盘锁★★

20.4.3 LeetCode1091——二进制矩阵中的最短路径★★

推荐练习题

第21章 动态规划

21.1 动态规划概述

21.1.1 什么是动态规划

21.1.2 动态规划求解问题的类型、性质和步骤

21.2 坐标型动态规划

21.2.1 什么是坐标型动态规划

21.2.2 LeetCode62——不同路径★★

21.2.3 LeetCode63——不同路径Ⅱ★★

21.2.4 LeetCode64——最小路径和★★

21.2.5 LeetCode1289——下降路径最小和Ⅱ★★★

21.2.6 LeetCode329——矩阵中的最长递增路径★★★

21.2.7 LeetCode174——地下城游戏★★★

21.3 序列型动态规划

21.3.1 什么是序列型动态规划

21.3.2 LeetCode300——最长递增子序列★★

21.3.3 LeetCode674——最长连续递增子序列★

21.3.4 LeetCode2393——严格递增的子数组的个数★★

21.3.5 LeetCode491——递增子序列★★

21.3.6 LeetCode646——最长数对链★★

21.3.7 LeetCode1062——最长重复子串★★

21.3.8 LeetCode2008——出租车的最大盈利★★

21.3.9 LeetCode718——最长重复子数组★★

21.3.10 LeetCode1143——最长公共子序列★★

21.3.11 LeetCode392——判断子序列★

21.3.12 LeetCode115——不同的子序列★★★

21.3.13 LeetCode1537——最大得分★★★

21.3.14 LeetCode2361——乘坐火车的最少费用★★★

21.3.15 LeetCode956——最高的广告牌★★★

21.4 划分型动态规划

21.4.1 什么是划分型动态规划

21.4.2 LeetCode639——解码方法Ⅱ★★★

21.4.3 LeetCode279——完全平方数★★

21.4.4 LeetCode343——整数的拆分★★

21.5 匹配型动态规划

21.5.1 什么是匹配型动态规划

21.5.2 LeetCode140——单词的拆分Ⅱ★★★

21.5.3 LeetCode32——最长的有效括号子串的长度★★★

21.5.4 LeetCode44——通配符匹配★★★

21.5.5 LeetCode10——正则表达式匹配★★★

21.6 背包型动态规划

21.6.1 什么是背包型动态规划

21.6.2 LeetCode416——分割等和子集★★

21.6.3 LeetCode494——目标和★★

21.6.4 LeetCode474——一和零★★

21.6.5 LeetCode879——盈利计划★★★

21.6.6 LeetCode871——最少加油次数★★★

21.6.7 LeetCode322——零钱兑换★★

21.6.8 LeetCode518——零钱兑换Ⅱ★★

21.6.9 LeetCode377——组合总和Ⅳ★★

21.7 树型动态规划

21.7.1 什么是树型动态规划

21.7.2 LeetCode834——树中距离之和★★★

21.7.3 LeetCode124——二叉树中的最大路径和★★★

21.7.4 LeetCode337——小偷一晚能够盗取的最大金额Ⅲ★★

21.8 区间型动态规划

21.8.1 什么是区间型动态规划

21.8.2 LeetCode516——最长回文子序列★★

21.8.3 LeetCode664——奇怪的打印机★★★

21.8.4 LeetCode375——猜数字大小Ⅱ★★

21.8.5 LeetCode312——戳气球★★★

21.8.6 LeetCode1000——合并石头的最低成本★★★

21.9 Floyd算法及其应用

21.9.1 Floyd算法

21.9.2 LeetCode1462——课程安排Ⅳ★★

21.9.3 LeetCode2608——图中的最短环★★★

21.9.4 LeetCode847——访问所有结点的最短路径★★★

推荐练习题

第22章 贪心法

22.1 贪心法概述

22.1.1 什么是贪心法

22.1.2 贪心法求解问题具有的性质

22.1.3 贪心法求解问题的一般过程及其优点

22.2 常见的贪心法求解问题

22.2.1 LeetCode455——分发饼干★

22.2.2 LeetCode881——救生船★★

22.2.3 LeetCode871——最少加油次数★★★

22.2.4 LeetCode2895——最少处理时间★★

22.2.5 LeetCode300——最长递增子序列★★

22.2.6 LeetCode354——俄罗斯套娃信封问题★★★

22.2.7 LeetCode1196——最多可以买到的苹果数量★

22.2.8 LeetCode179——最大数★★

22.2.9 LeetCode402——移掉k位数字★★

22.2.10 LeetCode1921——消灭怪物的最多数量★★

22.2.11 LeetCode502——IPO★★★

22.2.12 LeetCode1199——建造街区的最短时间★★★

22.3 区间问题

22.3.1 什么是区间问题

22.3.2 LeetCode435——无重叠区间★★

22.3.3 LeetCode452——用最少的箭击破气球★★

22.3.4 LeetCode56——合并区间★★

22.3.5 LeetCode1024——视频的拼接★★

22.3.6 LeetCode253——会议室Ⅱ★★

22.4 Prim和Kruskal算法及其应用

22.4.1 Prim和Kruskal算法

22.4.2 LeetCode1584——连接所有点的最少费用★★

22.4.3 LeetCode1168——水资源的分配优化★★★

22.5 Dijkstra算法及其应用

22.5.1 Dijkstra算法

22.5.2 LeetCode1631——消耗体力最少的路径★★

22.5.3 LeetCode1102——得分最高的路径★★

22.5.4 LeetCode2093——前往目标城市的最少费用★★

22.5.5 LeetCode787——k站中转内最便宜的航班★★

推荐练习题

第三部分 经典问题及其求解

第23章 跳跃问题

23.1 跳跃问题概述

23.2 跳跃问题的求解

23.2.1 LeetCode45——跳跃游戏Ⅱ★★

23.2.2 LeetCode55——跳跃游戏★★

23.2.3 LeetCode1871——跳跃游戏Ⅶ★★

23.2.4 LeetCode1306——跳跃游戏Ⅲ★★

23.2.5 LeetCode1345——跳跃游戏Ⅳ★★★

23.2.6 LeetCode1654——到家的最少跳跃次数★★

推荐练习题

第24章 迷宫问题

24.1 迷宫问题概述

24.2 迷宫问题的求解

24.2.1 LeetCode490——迷宫★★

24.2.2 LeetCode505——迷宫Ⅱ★★

24.2.3 LeetCode499——迷宫Ⅲ★★★

推荐练习题

第25章 设计问题

25.1 设计问题概述

25.2 常见设计问题的求解

25.2.1 LeetCode380——O(1)时间插入、删除和获取随机元素★★

25.2.2 LeetCode381——O(1)时间插入、删除和获取随机元素(可重复)★★★

25.2.3 LeetCode432——全O(1)的数据结构★★★

25.2.4 LeetCode295——数据流的中位数★★★

推荐练习题

附录A LeetCode题目及其章号索引表

附录B 《算法面试》配套LeetCode平台使用说明

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部