算法

https://labuladong.gitee.io/algo/
https://github.com/labuladong/fucking-algorithm
fork 仓库

数据结构

  • 数组
  • 链表
  • 栈: 先入后出
  • 队列: 先入先出
  • 字符串
  • hash 表,类似 js 对象
  • 集合 set

算法

  • 排序
  • 搜索
  • 递归
  • 回溯
  • 贪心
  • 动态规划
  • 二分
  • 深度优先 广度优先的搜索

数组

#1 two sum

  1. 暴力遍历:两层 for 循环
  2. 中间变量,空间换时间
    #15 three sum

斐波那契数列思路

斐波那契数列 fib(n) 指的是[1,1,2,3,5,8...]

  1. 递归
  2. 加缓存
  3. 递推
  4. 数学公式 - 矩阵 - 位运算

栈和队列

[#20 有效括号]
[#71 目录]

链表

数组的 增删 复杂度是很高的,因为其删除/插入中间某一个 index,其后所有的 index 都要相应的位移。
而链表是动态的数据结构。每个节点都是由(data[, next])来定义的
对于链表来说,删除某个 item 只需把其前一个 item 的 next 指向该 item 的后一个 item 即可,同理新增也只是更改其前一个节点的next

  • 优点:新增和删除 大大降低复杂度
  • 缺点:不能进行定点查询,随机访问

单向链表

1->2->3->null

环形链表

1->2->3->1

双向链表

每个节点都有 nextprev
1<-->2<-->3<-->4

跳表

1->2->3->4->null
跳表讲解
跳表是可以实现二分查找的有序链表。

2 队

3 栈

先入后出 FirstInLastOut
逻辑出栈,top 指针向下移动一位
逻辑入栈,栈头指针向上移动一位,新元素加入栈

栈适合解决的问题:
匹配问号


   转载规则


《算法》 Ryan Who 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录