常用技巧 
遍历二维数组中元素周边的八个元素 
在面对二维数组的问题时,经常需要访问中心元素(图中黄块)的相邻八个元素(图中灰块)。

我们可以借助一个方向数组来进行遍历,从而避免手写上下左右的位置计算:
js
const directions = [-1, 0, 1] // 方向数组
let centerX = 1
let centerY = 1
for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    const pointX = centerX + directions[i]
    const pointY = centerY + directions[j]
    if (pointX === centerX && pointY === centerY) {
      // 跳过中心点
      continue;
    }
    doSomeThing(pointX, pointY)
  }
}快慢指针 
快慢指针指在数组或者链表中,以不同的速度移动两个指针(一般是两倍的速度)。这种方法也叫 Tortoise and Hare Algorithm(龟兔赛跑算法),非常的形象。
这种方法常用来解决两种类型的问题:
- 判断是否存在环路(快慢指针相遇则说明存在环路)
 - 判断是否存在环路,并给出环路开始的节点(先让快慢指针相遇,然后再让慢指针回到起点,快指针速度变得和慢指针一样)
 

通常而言,能利用快慢指针算法解决的问题复杂度都很低,时间复杂度为 O(n),空间复杂度为 O(1)。
相关题目: