《数据结构与算法之美》学习汇总

此篇文章是对自己学习这门课程的一个总结和课后的一些练习,做一个汇总,希望对大家有帮助。本人是半路程序员,2018年2月开始学习C++的,下面的代码基本都是C++11版本的,代码有错误的地方请不吝留言赐教。附有部分练习LeetCode、POJ的题目。updated on 2019.9.3

1.链表 Linked List

1.1 单链表

1.2 练习

  • 判断字符串是否为回文串
  • 约瑟夫环问题
  • LRU缓存策略
  • 单链表的归并排序
  • 单链表中环的检测
  • POJ 1250 计算流失的顾客数

2.栈 Stack

2.1 顺序栈、链式栈

2.2 共享顺序栈

2.3 练习

  • POJ 1028 浏览器前进后退
  • POJ 1363 火车厢排队
  • LeetCode 557. 反转字符串中的单词 III(栈)

3.队列 Queue

3.1 链式队列、顺序队列

3.2 循环顺序队列

3.3 练习

  • 打印杨辉三角
  • POJ 2259 团队排队问题
  • POJ 1581 优先队列 priority_queue 比赛胜者求解
  • POJ 3481 double queue

4.递归 Recursion

4.1 走台阶问题

4.2 汉诺塔问题

4.3 练习

  • POJ 1664 苹果放盘子

5.排序 Sorting

5.1 十种基本的排序算法

5.2 快速排序的优化1— 快速排序细节优化2

5.3 练习

  • POJ 1007 DNA排序
  • POJ 1804 求解逆序数
  • 寻找数组内第K大的元素
  • 大小写字母数字分离

6.二分查找 Binary Search

6.1 查找给定条件的值

6.2 练习

  • 求平方根
  • POJ 3122 怎么吃更多的披萨
  • POJ 1064 分割线缆
  • POJ 2785 求4数之和为0的方案数
  • LeetCode 35. 搜索插入位置(二分查找)

7. 跳表 Skip List

7.1 跳表数据结构和实现


8. 散列表 Hash Table(哈希表)

8.1 散列表结构和实现(线性探测法&拉链法)

8.2 Hash算法及其应用场所

8.3 练习

  • POJ 1200 计算子串种类
  • POJ 2785 求4数之和为0的方案数(哈希法)
  • LeetCode 771. 宝石与石头(哈希)
  • LeetCode 535. TinyURL 的加密与解密(哈希)

9. 二叉树 Binary Tree

9.1 二叉树及其遍历

9.2 二叉查找树

9.3 红黑树

9.4 堆

9.x 练习

  • POJ 1577 给定叶子节点求二叉查找树
  • POJ 2255 Tree Recovery(已知前序&中序,求后序)
  • LeetCode 1008. 先序遍历构造二叉树(已知先序,求二叉搜索树)
  • POJ 2388 Who’s in the Middle(求中位数)
  • POJ 1442 Black Box(大小堆,求第K小的元素)
  • LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)
  • LeetCode 173. 二叉搜索树迭代器(中序遍历)
  • LeetCode 144. 二叉树的前序遍历(前序遍历)
  • LeetCode 94. 二叉树的中序遍历(中序遍历)
  • LeetCode 145. 二叉树的后序遍历(后序遍历&总结)
  • LeetCode 671. 二叉树中第二小的节点
  • LeetCode 257. 二叉树的所有路径(DFS)
  • LeetCode 617. 合并二叉树

10. 图 Graph

10.1 图的存储及其BFS/DFS搜索

10.2 最小生成树

10.3 拓扑排序

10.4 最短路径算法 Shortest Path

10.x 练习

  • 寻找社交网络n度好友
  • 农夫过河问题

11. 字符串匹配 string matching

11.1 BF & RK算法

11.2 BM算法

11.3 KMP算法

11.4 Trie树算法

11.5 AC自动机算法

11.x 练习

  • POJ 1936 字符匹配(暴力匹配)
  • POJ 3690 找星座(二维匹配)
  • POJ 3461 字符串匹配

12. 贪心算法 Greedy Algorithm

12.1 找零钱、区间覆盖、霍夫曼编码

12.x 练习

  • POJ 2453 二进制数字问题
  • POJ 2287 田忌赛马问题
  • 汽车加油次数问题

13. 分治算法 Divide & Conquer

13.1 分治算法介绍

13.x 练习

  • POJ 1804 归并求逆序数
  • 最近点对问题 & POJ 3714
  • 万里挑一 找假硬币

14. 回溯算法 Backtracking

14.1 简介 & 八皇后问题

14.2 回溯应用-- 0-1背包问题

14.x 练习

  • POJ 1753 Flip Game
  • POJ 1321 棋盘问题
  • POJ 2965 开冰箱的门
  • LeetCode 17. 电话号码的字母组合(回溯)
  • LeetCode 113. 路径总和 II(回溯)

15. 动态规划算法 Dynamic Programming

15.1 0-1背包问题(DP解法)

15.2 动态规划理论学习

15.3 搜索引擎拼写纠错

15.x 练习

  • 双11购物凑单
  • “杨辉三角”最短路径
  • 动态规划应用–找零钱
  • POJ 1276 ATM凑钱(动态规划)
  • 动态规划应用–最长递增子序列
  • LeetCode 53. 最大子序和(动态规划)
  • LeetCode 70. 爬楼梯

16. 高级篇

16.1 数据结构–位图 BitMap

16.2 朴素贝叶斯算法过滤垃圾短信

16.3 向量空间 Vector Space – 推荐系统

16.4 B+树 – MySQL数据库索引

16.5 A*搜索算法–游戏寻路

16.6 索引 Index – 快速查找数据

16.7 并行算法 Parallel Algorithm – 提高执行效率


17. 实战篇

17.1 Redis常用数据类型的数据结构

17.2 搜索引擎背后的数据结构和算法

17.3 短网址系统

17.4 如何选择数据结构和算法


18.练习题

18.1 LeetCode 15. 三数之和

18.2 LeetCode 169. 求众数

18.3 LeetCode 41. 缺失的第一个正数

18.4 LeetCode 141. 环形链表

18.5 LeetCode 23. 合并K个排序链表

18.6 LeetCode 20. 有效的括号(栈)

18.7 LeetCode 32. 最长有效括号(栈&DP)

18.8 LeetCode 150. 逆波兰表达式求值(栈)

18.9 LeetCode 641. 设计循环双端队列

18.10 LeetCode 239. 滑动窗口最大值(双端队列)

18.11 LeetCode 151. 翻转字符串里的单词(栈)

18.12 LeetCode 226. 翻转二叉树(DFS\BFS)

18.13 LeetCode 104. 二叉树的最大深度

18.14 LeetCode 111. 二叉树的最小深度

18.15 LeetCode 102. 二叉树的层次遍历

18.16 LeetCode 98. 验证二叉搜索树

18.17 LeetCode 112. 路径总和

18.18 LeetCode 200. 岛屿数量(图的遍历)

18.19 LeetCode 36. 有效的数独(哈希)

18.20 LeetCode 322. 零钱兑换(DP)

18.21 LeetCode 152. 乘积最大子序列(DP)

18.22 LeetCode 64. 最小路径和(DP)

18.23 LeetCode 121. 买卖股票的最佳时机

18.24 LeetCode 221. 最大正方形(DP)

18.25 LeetCode 88. 合并两个有序数组

18.26 LeetCode 21. 合并两个有序链表(单链表)

18.27 LeetCode 977. 有序数组的平方

18.28 LeetCode 986. 区间列表的交集

18.29 LeetCode 56. 合并区间(优先队列)

18.30 LeetCode 46. 全排列(回溯)

18.31 LeetCode 47. 全排列 II(回溯+搜索剪枝)

18.32 LeetCode 122. 买卖股票的最佳时机 II

18.33 LeetCode 142. 环形链表 II(链表环的检测)

18.34 LeetCode 287. 寻找重复数(BitMap)

18.35 LeetCode 268. 缺失数字

18.36 LeetCode 136. 只出现一次的数字(异或^)

18.37 LeetCode 645. 错误的集合

18.38 LeetCode 62. 不同路径(DP)

18.39 LeetCode 78. 子集(回溯)

18.40 LeetCode 90. 子集 II(回溯+剪枝)

18.41 LeetCode 9. 回文数

18.42 LeetCode 160. 相交链表

18.43 LeetCode 89. 格雷编码

18.44 LeetCode 124. 二叉树中的最大路径和

18.45 LeetCode 237. 删除链表中的节点

18.46 LeetCode 206. 反转链表

18.47 LeetCode 146. LRU缓存机制(哈希链表)

18.48 LeetCode 292. Nim 游戏

18.49 LeetCode 155. 最小栈

18.50 LeetCode 61. 旋转链表

18.51 LeetCode 59. 螺旋矩阵 II

18.52 LeetCode 238. 除自身以外数组的乘积

你可能感兴趣的:(算法,数据结构,《数据结构与算法之美》学习笔记)