algorithm icon indicating copy to clipboard operation
algorithm copied to clipboard

《数据结构与算法之美》学习笔记以及 Swift 代码实现 ,原始仓库 https://github.com/wangzheng0822/algo

algorithm

使用 Swift 语言实现数据结构与算法之美专栏代码 ,在原有基础上扩增了一些内容,原始代码 https://github.com/wangzheng0822/algo

一、目录结构

源代码在第一级目录所对应的文件夹下,测试工程以及测试代码在 Algorithm 目录下,可以直接使用 Xcode 打开工程文件 Algorithm.xcodeproj,选择对应的 Target 运行测试代码

代码组织结构

二、数据结构内容

学习路线

数组

  • 实现一个支持动态扩容的数组
  • 实现一个大小固定的有序数组,支持动态增删改操作
  • 实现两个有序数组合并为一个有序数组

链表

  • 实现单链表循环链表双向链表,支持增删操作
  • 实现单链表反转
  • 实现两个有序的链表合并为一个有序链表
  • 实现求链表的中间结点
  • 实现求链表的倒数第K个结点(快慢指针)
  • 判断链表是否有环
  • 链表有环的话,求链表环的入口位置

  • 用数组实现一个顺序栈
  • 用链表实现一个链式栈
  • 编程模拟实现一个浏览器的前进、后退功能

队列

  • 用数组实现一个顺序队列
  • 用链表实现一个链式队列
  • 实现一个循环队列

递归

  • 编程实现斐波那契数列求值 f(n) = f(n-1) + f(n-2)
  • 编程实现求阶乘 n!
  • 编程实现一组数据集合的全排列
  • 台阶总共多少走法问题
  • 递归常见问题

排序算法

  • 冒泡排序、插入排序、希尔排序、选择排序
  • 归并排序快速排序
  • 桶排序、计数排序、基数排序
  • 堆排序
  • 编程实现O(n)时间复杂度内找到一组数据的第K大元素

二分查找

  • 实现一个有序数组的二分查找算法
  • 实现一个数的平方根求解,要求精确到小数点后六位
  • 实现模糊二分查找算法(比如大于等于给定值的第一个元素)
  • 实现循环有序数组查找给定值

跳表

  • 实现跳表

散列表

  • 实现一个基于链表法解决冲突问题的散列表
  • 实现一个LRU缓存淘汰算法

二叉树

  • 实现一个二叉查找树,并且支持插入、删除、查找操作
  • 实现查找二叉查找树中某个结点的后继、前驱结点
  • 实现二叉树的前、中、后序以及按层遍历

  • 实现一个小顶堆、大顶堆、优先级队列
  • 实现堆排序
  • 利用优先级队列合并K个有序数组
  • 求一组动态数据集合的最大Top K

  • 实现有向图、无向图、有权图、无权图的邻接矩阵邻接表表示方法
  • 实现图的深度优先搜索广度优先搜索
  • 实现图的最小生成树算法(Kruskal、Prime)
  • 实现 Dijkstra 算法、A*算法
  • 实现拓扑排序的 Kahn 算法DFS 算法

字符串

  • 实现朴素的字符串匹配算法
  • 实现BM算法
  • 实现KMP算法
  • 实现一个字符集,只包含a~z这26个英文字母的Trie树

贪心算法

  • 分糖果、钱币找零、区间覆盖
  • 霍夫曼编码问题
  • 非负整数中,移除K个数字,让剩下的数字值最小
  • n个人等待服务问题,如何安排被服务的先后顺序,使 n 个人总的等待时间最短

分治算法

  • 求一组数据的逆序对个数

回溯算法

  • 利用回溯算法求解八皇后问题
  • 利用回溯算法求解0-1背包问题

动态规划

  • 0-1背包问题
  • 最小路径和
  • 编程实现莱文斯坦最短编辑距离
  • 编程实现查找两个字符串的最长公共子序列
  • 编程实现一个数据序列的最长递增子序列

三、LeetCode练习

数组和链表

  • 三数之和
  • 求众数
  • 求缺失的第一个正数
  • 环形链表
  • 合并K个排序链表

栈、队列和递归

  • 有效的括号
  • 最长有效的括号
  • 逆波兰表达式求值
  • 设计一个双端队列
  • 滑动窗口最大值
  • 爬楼梯

排序和二分查找

散列表和字符串

二叉树和堆

贪心、分治、回溯和动态规划

更多 LeetCode 题解请点击

四、学习资源

1. 可视化工具

  • VisuAlgo.net:数据结构与算法动态可视化网站,网站是由 Steven Halim 博士推行建立,初衷是为了帮助新加坡国立大学的学生们,更好的理解数据结构与算法,并进一步强化对各项知识点的吸收;
  • 旧金山大学数据结构与算法可视化网站 :见名知意,旧金山大学为学生提供的数据结构与算法在线可视化网站,可以直接在网页上面查看算法执行效果;

2. Swift 数据结构与算法

3. LeetCode 相关

4. 其它语言数据结构与算法

  • 数据结构与算法博客:使用C、C++、Java 语言实现的常见数据结构与算法博客,原理讲的比较透彻,代码编写的比较经典,学习时可以参考下;
  • algorithms:使用 Java 语言编写的 《剑指offer》题解;
  • 《编程之法:面试与算法心得》:书籍配套代码,七月在线科技创始人兼 CEO,CSDN 超人气博客"结构之法算法之道"作者 July 编写,质量有保证,可参考学习;