本仓库使用 Java 实现常见的算法和解决常见的算法面试题目
| 排序算法 | 平均时间复杂度 | 空间复杂度 | 排序方式 | 稳定性 | 代码实现 | 说明 |
|---|---|---|---|---|---|---|
| 冒泡排序 | O(N^2) |
O(1) | In-place | 稳定 | Java | —— |
| 选择排序 | O(N^2) |
O(1) | In-place | 不稳定 | Java | ------ |
| 插入排序 | O(N^2) |
O(1) | In-place | 稳定 | Java | |
| 希尔排序 | O(nLogN) |
O(1) | In-Place | 不稳定 | Java | |
| 归并排序 | O(nLogN) |
O(N) | out-Place | 稳定 | Java | |
| 自顶向上的归并排序 | O(nLogN) |
O(N) | out-Place | 稳定 | java | 自顶先上 |
| 快速排序 | O(nLogN) |
O(logN) | In-Place | 不稳定 | java | |
| 快速排序2版 | o(nLogN) |
O(logN) | In-Place | 不稳定 | Java | 二路快排 |
| 三路快速排序 | o(nLogN) |
O(logN) | In-Place | 不稳定 | java | 上路快排 |
| 最大索引堆 | Null | NUll | NUll | NUll | java | 最大索引 |
| 堆排序 | o(nLogN) |
O(1) | In-Place | 不稳定 | Java | |
| 堆排序2 | o(nLogN) |
O(1) | In-Place | 不稳定 | java | |
| 堆排序3 | o(nLogN) |
O(1) | In-Place | 不稳定 | java | |
| 基数排序 | O(n * K) | O(N + K) | Out—place | 稳定 | java |
| 二叉树 | 平均时间复杂度 | 空间复杂度 | 代码实现 |
|---|---|---|---|
| 顺序查找表 | Null | Null | java |
| 基于Hash的散列表 | Null | NUll | Java |
| 链式查找链表 | Null | Null | Java |
| 二分搜索树 | Null | NUll | java |
| 平衡二叉树---红黑树 | NUll | Null | Java |
| 二分查找算法 (递归) | java | ||
| 二分查找算法(非递归) | Java |
| 图 | 平均时间复杂度 | 空间复杂度 | 代码实现 |
|---|---|---|---|
| DenseGraph | Java | ||
| DenseWeightedGraph | java | ||
| SparseGraph | java | ||
| SparseWeightedGraph | java |
| 题号 | 题目 | 英文 | 牛客网在线编程 | 答案解答 |
|---|---|---|---|---|
| 02 | 【 实现Singleton 模式——七种实现方式】 | Singleton | ||
| 03 | 【二维数组中的查找】 | FindInPartiallySortedMatrix | FindInPartiallySortedMatrix | Java |
| 04 | 【替换空格】 | ReplaceBlank | ReplaceBlank | java |
| 05 | 【从尾到头打印链表】 | PrintListFromTailToHead | PrintListFromTailToHead | java |
| 06 | 【重建二叉树】 | ReConstructBinaryTree | ReConstructBinaryTree | java |
| 07 | 【用两个栈实现队列】 | TwoStackQueue | TwoStackQueue | java |
| 08 | 【旋转数组的最小的数字】 | MinNumberInRotateArray | MinNumberInRotateArray | java |
| 09 | 【斐波那契数列】 | Fibonacci | Fibonacci | java |
| 10 | 【跳台阶】 | JumpSteps | JumpSteps | java |
| 11 | 【变态跳台阶】 | JumpStepsII | JumpStepsII | java |
| 12 | 【矩形覆盖】 | RectCover | RectCover | java |
| 13 | 【二进制中1的个数】 | NumberOf1 | NumberOf1 | java |
| 14 | 【数值的整数次方】 | Power | Power | java |
| 15 | 【调整数组顺序使奇数位于偶数前面】 | ReOrderArray | ReOrderArray | java |
| 16 | 【链表中倒数第K个节点】 | FindKthToTail | FindKthToTail | java |
| 17 | 【反转链表】 | ReverseList | ReverseList | java |
| 18 | 【合并两个排序的链表】 | ListNodeMerge | ListNodeMerge | java |
| 19 | 【树的子结构】 | HasSubtree | HasSubtree | java |
| 20 | 【二叉树的镜像】 | MirrorBinaryTree | MirrorBinaryTree | java |
| 21 | 【顺时针打印矩阵】 | PrintMatrix | PrintMatrix | |
| 22 | 【包含min函数的栈】 | GetMinStack | GetMinStack | java |
| 23 | 【栈的压入弹出顺序】 | IsPopOrder | IsPopOrder | java |
| 24 | 【从上往下打印二叉树】 | |||
| 25 | 【二叉搜索树的后序遍历序列】 | |||
| 26 | 【二叉树中和为某一值的路径】 | |||
| 27 | 【复杂链表的复制】 | RandomListNode | RandomListNode | java |
| 28 | 【二叉搜索树与双向链表】 | |||
| 29 | 【字符串的排序】 | TReeCodeSort | TReeCodeSort | |
| 30 | 【数组中出现次数超过一半的数字】 | |||
| 31 | 【最小的K个数】 | |||
| 32 | 【连续子数组的最大和】 | |||
| 33 | 【整数中1出现的次数】 | |||
| 34 | 【把数组排成最小的数】 | |||
| 35 | 【丑数】 | |||
| 36 | 【第一个只出现一次的字符位置】 | |||
| 37 | 【数组的逆序对】 | |||
| 38 | 【两个链表中的第一个公共节点】 | FindFirstCommonNodeInList | FindFirstCommonNodeInList | java |
| 39 | 【数字在排序数组中出现的次数】 | |||
| 40 | 【二叉树的深度】 | |||
| 41 | 【平衡二叉树】 | |||
| 42 | 【数组中只出现一次的数字】 | |||
| 43 | 【和为S的连续正数序列】 | |||
| 44 | 【和为S的两个数字】 | |||
| 45 | 【左旋转字符串】 | |||
| 46 | 【翻转单词顺序列】 | |||
| 47 | 【扑克牌顺子】 | |||
| 48 | 【孩子们的游戏】 | |||
| 49 | 【求1+2+3+...+n】 | |||
| 50 | 【不用加减乘除做加法】 | |||
| 51 | 【把字符串转换成整数】 | |||
| 52 | 【数组中重复的数字】 | |||
| 53 | 【构建乘积数组】 | |||
| 54 | 【正则表达式匹配】 | |||
| 55 | 【表示数值的字符串】 | |||
| 56 | 【字符流中第一个不重复的字符】 | |||
| 57 | 【链表中环的入口结点】 | EntryNodeOfLoop | EntryNodeOfLoop | java |
| 58 | 【删除链表中重复的节点】 | DeleteDuplicationListNode | DeleteDuplicationListNode | java |
| 59 | 【二叉树的下一个节点】 | |||
| 60 | 【对称的二叉树】 | |||
| 61 | 【按之字形顺序打印二叉树】 | |||
| 62 | 【把二叉树打印成多行】 | |||
| 63 | 【序列化二叉树】 | |||
| 64 | 【二叉搜索树的第K个节点】 | |||
| 65 | 【数据流中的中位数】 | |||
| 66 | 【滑动窗口的最大值】 | |||
| 67 | 【矩阵中的路径】 |
- 算法第四版 :https://book.douban.com/subject/19952400/
- 剑指offer :https://book.douban.com/subject/6966465/
- Algorithms, 4th edition textbook code and libraries:https://github.com/kevin-wayne/algs4
- 《算法(第4版)》习题解答 :https://github.com/jimmysuncpt/Algorithms && https://github.com/aistrate/AlgorithmsSedgewick
- 慕课网上的课程《算法与数据结构》: https://github.com/liuyubobobo/Play-with-Algorithms
- Algorithm Visualizer :https://github.com/parkjs814/AlgorithmVisualizer
- 一些好的计算机科学门户网站:https://www.geeksforgeeks.org/data-structures/
- 排序算法的 GitBook 在线书籍 《十大经典排序算法》:https://github.com/hustcc/JS-Sorting-Algorithm