导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

业务技能

针对性攻坚

AI


🔥 不借助临时变量,进行两个整数的交换

var a = 2, b = 4;
// 使用“和”形式
function swap(a, b) {
  a = a + b; // 此时 a 等于两数之和
  b = a - b; // 两数之和 减 b 为 a,此时 b 为 a
  a = a - b; // 两数之和 减 b,相当于减 a,此时 a 为 b
  return [a, b];
}
// 利用解构赋值
function swap(a, b) {
  [a, b] = [b, a];
  return [a, b];
}

排序算法

排序算法都可以理解成:

外层:处理第几个元素(第几轮)

内层:在这一轮中怎么比较(或查找)

🔥 冒泡

var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];

function bubbleSort(arr) {
  var len = arr.length, temp;
  for (var i = 0; i < len - 1; i++) {
    for (var j = 0; j < len - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

🔥 快排

var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  var leftArr = [], rightArr = [], q = arr[0];

  for (var i = 1; i < arr.length; i++) {
    if (arr[i] > q) {
      rightArr.push(arr[i]);
    } else {
      leftArr.push(arr[i]);
    }
  }

  return [].concat(quickSort(leftArr), [q], quickSort(rightArr));
}

深度遍历广度遍历的区别?

类比:你在一个迷宫里找出口

算法 像什么? 行为方式
DFS(深度优先) 一条路走到黑的人 第一条路一直往深处走,撞墙后再回到上一个分岔口换路
BFS(广度优先) 扫街式搜索的人 所有方向都先走一步 → 再走第二步 → 再走第三步……越来越远

对于算法来说 无非就是时间换空间 空间换时间

  1. 深度优先不需要记住所有的节点, 所以占用空间小, 而广度优先需要先记录所有的节点占用空间大
  2. 深度优先有回溯的操作(没有路走了需要回头)所以相对而言时间会长一点
  3. 深度优先采用的是堆栈的形式, 即先进后出
  4. 广度优先则采用的是队列的形式, 即先进先出