https://labuladong.gitee.io/algo/
https://github.com/labuladong/fucking-algorithm
fork 仓库
数据结构
- 数组
- 链表
- 栈: 先入后出
- 队列: 先入先出
- 字符串
- 堆
- hash 表,类似 js 对象
- 集合 set
- 树
算法
- 排序
- 搜索
- 递归
- 回溯
- 贪心
- 动态规划
- 二分
- 深度优先 广度优先的搜索
数组
- 暴力遍历:两层 for 循环
- 中间变量,空间换时间
#15 three sum
斐波那契数列思路
斐波那契数列 fib(n) 指的是[1,1,2,3,5,8...]
- 递归
- 加缓存
- 递推
- 数学公式 - 矩阵 - 位运算
栈和队列
[#20 有效括号]
[#71 目录]
链表
数组的 增删 复杂度是很高的,因为其删除/插入中间某一个 index,其后所有的 index 都要相应的位移。
而链表是动态的数据结构。每个节点都是由(data[, next])
来定义的
对于链表来说,删除某个 item 只需把其前一个 item 的 next 指向该 item 的后一个 item 即可,同理新增也只是更改其前一个节点的next
- 优点:新增和删除 大大降低复杂度
- 缺点:不能进行定点查询,随机访问
单向链表
1->2->3->null
环形链表
1->2->3->1
双向链表
每个节点都有 next
和 prev
1<-->2<-->3<-->4
跳表
1->2->3->4->null
跳表讲解
跳表是可以实现二分查找的有序链表。
2 队
3 栈
先入后出 FirstInLastOut
逻辑出栈,top 指针向下移动一位
逻辑入栈,栈头指针向上移动一位,新元素加入栈
栈适合解决的问题:
匹配问号