AlgorithmicPractice
November 5, 2020 · View on GitHub
本篇是关于LeetCode算法练习的总结(题目主要来源于剑指offer),内容划分为以下章节:
注:
main.cpp展示测试效果;
一.基础数据结构
1.1 字符串
1.2 数组
二.链表
三.栈和队列
四.二叉树
五.排序
5.1 排序
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Kth Largest Element in an Array | 数组中的第K个最大元素 |
| 2 | Sort List | 排序链表 |
| 3 | Reverse pair in array | 数组中的逆序对 |
5.2 排序算法
| 序号 | 排序(示例链接) |
|---|---|
| 1 | 冒泡排序 |
| 2 | 选择排序 |
| 3 | 插入排序 |
| 4 | 希尔排序 |
| 5 | 快速排序 |
| 6 | 归并排序 |
| 7 | 堆排序 |
六.二分查找
七.动态规划
八.哈希表
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Two Sum | 两数之和 |
| 2 | The first character that appears only once | 第一个只出现一次的字符 |
| 3 | Repeating numbers in the array | 数组中重复的数字 |
九.其他
9.1 滑动窗口
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Sliding Window Maximum | 滑动窗口最大值 |
| 2 | The maximum value of the queue | 队列的最大值 |
| 3 | And is a sequence of consecutive positive Numbers for S | 和为s的连续正数序列 |
9.2 递归
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Fibonacci Number | 斐波那契数 |
| 2 | Construct Binary Tree From Preorder And Inorder Traversal | 从前序与中序遍历序列构造二叉树 |
| 3 | Powx N | Pow(x, n) |
9.3 回朔算法
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Arrangement of strings | 字符串的排列 |
| 2 | Robot's range of motion | 机器人的运动范围 |
9.4 分治算法
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | The smallest k number | 最小的k个数 |
| 2 | Majority Element | 多数元素 |
| 3 | convert binary search tree to sorted doubly linked list | 二叉搜索树与双向链表 |
9.5 堆
| 序号 | 题目(解答链接) | LeetCode(原题链接) |
|---|---|---|
| 1 | Find Median From Data Stream | 数据流的中位数 |
十.数学
10.1 位运算
10.2 其他
热门题型练习
| 序号 | LeetCode(题目链接) | 备注 | 题解 |
|---|---|---|---|
| 1 | 反转链表 | ||
| 2 | 二叉树的最近公共祖先 | -2 | |
| 3 | 环形链表 II | -1 | |
| 4 | 最大子序和 | -2 | |
| 5 | 合并两个有序链表 | ||
| 6 | 数组中的第K个最大元素 | ||
| 7 | 二叉树的前序遍历 | 1 | |
| 8 | K个一组翻转链表 | :2 | |
| 9 | 用两个栈实现队列 | -1 | |
| 10 | 相交链表 | -2 | |
| 11 | LRU缓存机制 | -2 | |
| 12 | 买卖股票的最佳时机 | :1 | |
| 13 | 二叉树的完全性检验 | :2 | |
| 14 | 反转字符串 | ||
| 15 | 二叉树的层次遍历 | ||
| 16 | 二叉树的直径 | -2 | |
| 17 | 翻转二叉树 | -1 | |
| 18 | 两数之和 | -1 | |
| 19 | 无重复字符的最长子串 | -1 | |
| 20 | 分隔链表 | -2 | 题解 |
| 21 | 旋转数组 | -1 | 题解 |
| 22 | 路径总和 II | -1 | |
| 23 | 翻转字符串里的单词 | -1 | |
| 24 | 字符串解码 | -2 | 题解 |
| 25 | 爬楼梯 | -1 | |
| 26 | 螺旋矩阵 | -1 | |
| 27 | LFU缓存 | -2 | |
| 28 | x 的平方根 | -1 | 题解 |
| 29 | 零钱兑换 | -2 | 题解 |
知识点
1. 算法知识
- 单调栈,单调队列和优先队列
- 散列表(哈希表)
- 字符串匹配(BF/RK/BM/KMP/Trie树/AC自动机)
- 树(AVL/红黑树/B/B+/2-3/堆/堆排序)
- 图(关键路径/最小生成树/最短路径/拓扑排序)
- 其他(跳表/并查集/BitMap/Bloom filter/LRU)
TODO:
2. 算法问题处理
3. 算法知识收藏
附:
- 性能对比图
- 如果需要经常添加或删除结点,链表可能是一个不错的选择。
- 如果需要经常按索引访问元素,数组可能是比链表更好的选择。

- 十大排序算法比较图

- 算法知识体系图

- 常用算法时间复杂度
