那些年搞不懂的基础算法

99 阅读1分钟

时间/空间复杂度:

数组:

  • 一维创建 new Array(n).fill(0)
  • 二维创建 Array.from({ length: m }, () => Array(n).fill(0))
  • 注意:fill不能填充对象

栈和队列:

  • 数组新增 unshift push splice
  • 数组删除 shift pop splice
  • 栈 用pop和push进行增删数组(先进后出)
  • 队列 用push和shift进行增删数组(先进先出)
  • 链表增删开销小O(1),栈改查开销小O(1)

树:

  • 二叉树的结构:数据域,左子结点,右子结点
  • 二叉树的遍历:前中后层序四种遍历方式

字符串:

  • 考点一般结合经典算法

双指针的应用:

  • 有序+数组 === > 对撞指针
  • 双指针: dummy节点的使用(处理掉头结点为空的边界问题)
  • 链表就是指针(双,多指针)之间的变换

环形链表的应用

  • 关键点:环形是如何成环的

DFS 和 BFS

  • DFS 类似于树结构 =》 栈结构 (函数调用栈)

排序算法

动态规划

  • 重叠子问题(---可以剪枝)
    • 带备忘录的方法
    • DP table