ALGORITHM-TUTORIAL
💾 algorithm-tutorial 是一个数据结构与算法教程。
掌握数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。
# 📖 内容
- 综合
- 数据结构和算法指南
- 复杂度分析 - 关键词:
时间复杂度
、空间复杂度
、大 O 表示法
、复杂度量级
- 线性表
- 树
- 哈希表 - 关键词:
哈希函数
、装载因子
、哈希冲突
、开放寻址法
、拉链法
- 跳表 - 关键词:
多级索引
- 图
# 💻 刷题
# 数组
- 三数之和 (opens new window)
- 两数之和 (opens new window)
- 二维数组 (opens new window)
- 删除排序数组中的重复项 (opens new window)
- 加一 (opens new window)
- 在排序数组中查找元素的第一个和最后一个位置 (opens new window)
- 在排序数组中查找数字 I (opens new window)
- 存在重复元素 (opens new window)
- 对角线遍历 (opens new window)
- 寻找数组的中心索引 (opens new window)
- 将数组分成和相等的三个部分 (opens new window)
- 数组二分查找 (opens new window)
- 数组拆分 1 (opens new window)
- 旋转数组 (opens new window)
- 旋转矩阵 (opens new window)
- 最大连续 1 的个数 (opens new window)
- 杨辉三角 (opens new window)
- 杨辉三角 2 (opens new window)
- 模拟 ArrayList1 (opens new window)
- 模拟 ArrayList2 (opens new window)
- 移动零 (opens new window)
- 移除元素 (opens new window)
- 至少是其他数字两倍的最大数 (opens new window)
- 螺旋矩阵 (opens new window)
- 长度最小的子数组 (opens new window)
- 零矩阵 (opens new window)
# 链表
- 两数相加 (opens new window)
- 二进制链表转整数 (opens new window)
- 删除排序链表中的重复元素 (opens new window)
- 单链表示例 (opens new window)
- 双链表示例 (opens new window)
- 反转链表 (opens new window)
- 合并 K 个排序链表 (opens new window)
- 合并 K 个排序链表解法 2 (opens new window)
- 合并两个有序链表 (opens new window)
- 回文链表 (opens new window)
- 排序链表 (opens new window)
- 环形链表 (opens new window)
- 相交链表 (opens new window)
- 移除重复节点 (opens new window)
- 移除链表元素 (opens new window)
- 返回倒数第 k 个节点 (opens new window)
- 链表的中间结点 (opens new window)
# 栈
- 三合一 (opens new window)
- 基本计算器 (opens new window)
- 最小栈 (opens new window)
- 最小栈 2 (opens new window)
- 有效的括号 (opens new window)
- 栈排序 (opens new window)
- 棒球比赛 (opens new window)
- 比较含退格的字符串 (opens new window)
- 用栈实现队列 (opens new window)
- 用队列实现栈 (opens new window)
# 队列
- 动态扩容数组实现的队列 (opens new window)
- 数组实现的队列 (opens new window)
- 最近的请求次数 (opens new window)
- 设计循环队列 (opens new window)
- 链表实现的队列 (opens new window)
# 字符串
- 二进制求和 (opens new window)
- 实现 strStr() (opens new window)
- 最长公共前缀 (opens new window)
- 反转字符串 (opens new window)
- 反转字符串中的单词 (opens new window)
- 反转字符串中的单词 III (opens new window)
# 树
# 二叉树
- 二叉树中的最大路径和 (opens new window)
- 二叉树的中序遍历 (opens new window)
- 二叉树的前序遍历 (opens new window)
- 二叉树的后序遍历 (opens new window)
- 二叉树的层次遍历 (opens new window)
- 二叉树的层次遍历 2 (opens new window)
- 二叉树的序列化与反序列化 (opens new window)
- 二叉树的所有路径 (opens new window)
- 二叉树的最大深度 (opens new window)
- 二叉树的最小深度 (opens new window)
- 二叉树的最近公共祖先 (opens new window)
- 二叉树的锯齿形层次遍历 (opens new window)
- 从先序遍历还原二叉树 (opens new window)
- 叶子相似的树 (opens new window)
- 填充每个节点的下一个右侧节点指针 (opens new window)
- 填充每个节点的下一个右侧节点指针 II (opens new window)
- 对称二叉树 (opens new window)
- 平衡二叉树 (opens new window)
- 相同的树 (opens new window)
- 翻转二叉树 (opens new window)
- 路径总和 (opens new window)
# 二叉搜索树
- 二叉搜索树中的插入操作 (opens new window)
- 二叉搜索树的最近公共祖先 (opens new window)
- 二叉搜索树节点最小距离 (opens new window)
- 将有序数组转换为二叉搜索树 (opens new window)
- 验证二叉搜索树 (opens new window)
# 📚 资料
- 书籍
- 刷题必备
- 《剑指 offer》
- 《编程之美》
- 《编程之法:面试和算法心得》
- 《算法谜题》 都是思维题
- 基础
- 算法设计
- 《算法设计与分析基础(第 3 版) (opens new window)》
- 《Algorithm Design Manual》 - 算法设计手册 红皮书
- 《算法导论》 (opens new window) - 是一本对算法介绍比较全面的经典书籍
- 《Algorithms on Strings,Trees and Sequences》
- 《Advanced Data Structures》 - 各种诡异高级的数据结构和算法 如元胞自动机、斐波纳契堆、线段树 600 块
- 刷题必备
- 学习网站
- https://github.com/TheAlgorithms/Java
- https://github.com/nonstriater/Learn-Algorithms
- https://github.com/trekhleb/javascript-algorithms
- https://github.com/wangzheng0822/algo
- https://github.com/kdn251/interviews/blob/master/README-zh-cn.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
- July 博客 (opens new window)
- 《数学建模十大经典算法》
- 《数据挖掘领域十大经典算法》
- 《十道海量数据处理面试题》
- 《数字图像处理领域的二十四个经典算法》
- 《精选微软等公司经典的算法面试 100 题》
- The-Art-Of-Programming-By-July (opens new window)
- 微软面试 100 题 (opens new window)
- 程序员编程艺术 (opens new window)
- 基本算法演示
- 编程网站
- 教程
- 高级数据结构和算法 (opens new window) 北大教授张铭老师在 coursera 上的课程。完成这门课之时,你将掌握多维数组、广义表、Trie 树、AVL 树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。当然 coursera 上也还有很多其它算法方面的视频课程。
- 算法设计与分析 Design and Analysis of Algorithms (opens new window) 由北大教授 Wanling Qu 在 coursera 讲授的一门算法课程。首先介绍一些与算法有关的基础知识,然后阐述经典的算法设计思想和分析技术,主要涉及的算法设计技术是:分治策略、动态规划、贪心法、回溯与分支限界等。每个视频都配有相应的讲义(pdf 文件)以便阅读和复习。
- 算法面试通关 40 讲 (opens new window)
- 数据结构与算法之美 (opens new window)
# 🚪 传送
| 技术文档归档 (opens new window) | 算法和数据结构教程系列 (opens new window) |