常见面试算法
八月 26, 2021
尽量每天 leetcode 一道算法题, 简单题我重拳出击, 中等题我边缘 OB
你说困难题怎么办? 我唯唯诺诺直奔解题区 (只做了解就好,不能强求 哈哈)
简单算法
排序
- 插入排序
1 | function insertSort(arr) { |
- 冒泡排序
1 | function bubbleSort(arr) { |
- 快速排序
1 | function quickSort(arr) { |
- 选择排序
1 | function selectSort(arr) { |
等等
二分法
- 初始条件:low = 0, height = length-1, mid = parseInt((height - low) / 2) + low
- 终止:low === height (即 while(low !== height){})
- 向左查找:height = mid
- 向右查找: low = mid + 1
链表
-
展开查看
var reverseList = function(head) { if (!head) return null; let pre = null, cur = head; while (cur) { // 关键: 保存下一个节点的值 let next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; };
合并两个升序链表
链表倒数第 k 项值 (双指针,慢指针等待 k 步)
字符串
数组
二叉树
深度优先遍历 (前序,中序,后序)
1
2
3
4
5
6
7
8
9// DFS
function walk(head) {
if (!head) return;
// 前序 handle head
walk(head.left);
// 中序 handle head
walk(head.right);
// 后序 handle head
}广度优先遍历 (层序)
1
2
3
4
5
6
7
8
9
10
11
12// BFS
const list = [head];
while (list.length) {
let len = list.length;
while (len) {
let cur = list.pop();
// handle cur
if (cur.left) list.push(cur.left);
if (cur.right) list.push(cur.right);
len--;
}
}
未来再更…