本仓库使用 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