# 算法
算法是其次,主要是写码能力与熟练度。 作者:文航 链接 (opens new window) 来源:知乎
算法虽然在平常工作中接触的可能不多,但是面试还会可能遇到,尤其是一些知名外企如微软、Facebook、Google,因为面试的人都很优秀,所以算法基础、专业技术能力、衍生技术能力都需要,但也并不是绝对。
刷题的话建议大家直接使用VSCode安装Leetcode插件。
以下内容来自极客时间覃超老师算法课内容,只是为了面试可以只刷下面列的重点题。
刷题方式:
五毒神掌
第一遍:不要死磕 要看代码学习(一定要看国际版的高票回答)
第二遍:自己写
第三遍:24小时后
第四遍:一周后
第五遍:面试前


数组 链表
- 两数之和 (opens new window)
- 盛最多水的容器 (opens new window)
- 移动零 (opens new window)
- 爬楼梯 (opens new window)
- 三数之和 (opens new window)
- 反转链表 (opens new window)
- 两两交换链表中的节点 (opens new window)
- 环形链表 (opens new window)
- 环形链表 II (opens new window)
- K 个一组翻转链表 (opens new window) (困难)
栈 队列 优先队列 双端队列
- 有效的括号 (opens new window)
- 最小栈 (opens new window)
- 柱状图中最大的矩形 (opens new window)(困难)
- 滑动窗口最大值 (opens new window)(困难)
- 设计循环双端队列 (opens new window)
- 删除排序数组中的重复项 (opens new window)
- 旋转数组 (opens new window)
- 合并两个有序链表 (opens new window)
- 合并两个有序数组 (opens new window)
- 加一 (opens new window)
哈希表 映射 集合
树 二叉树 二叉搜索树
堆和二叉堆、图
- 堆的实现代码: https://shimo.im/docs/Lw86vJzOGOMpWZz2/ (opens new window)
- 拓扑排序(Topological Sorting): https://zhuanlan.zhihu.com/p/34871092 (opens new window)
- 最小的 k 个数 (opens new window)
- 滑动窗口最大值 (opens new window)(困难)
- HeapSort :自学 https://www.geeksforgeeks.org/heap-sort/
- 丑数 (opens new window)
- 前 K 个高频元素 (opens new window)
泛型递归、树的递归
分治 回溯
深度优先搜索和广度优先搜索
贪心算法
二分
动态规划
打家劫舍 (opens new window)(字节跳动、谷歌、亚马逊在半年内面试中考过)
打家劫舍 II (opens new window)(字节跳动在半年内面试中考过)
买卖股票的最佳时机 (opens new window)(亚马逊、字节跳动、Facebook 在半年内面试中常考)
买卖股票的最佳时机 II (opens new window)(亚马逊、字节跳动、微软在半年内面试中考过)
买卖股票的最佳时机 III (opens new window)(字节跳动在半年内面试中考过)
最佳买卖股票时机含冷冻期 (opens new window)(谷歌、亚马逊在半年内面试中考过)
买卖股票的最佳时机 IV (opens new window)(谷歌、亚马逊、字节跳动在半年内面试中考过)
完全平方数 (opens new window)(亚马逊、谷歌在半年内面试中考过)
跳跃游戏 (opens new window)(亚马逊在半年内面试中考过)
跳跃游戏 II (opens new window)(亚马逊、华为字节跳动在半年内面试中考过)
不同路径 (opens new window)(Facebook、亚马逊、微软在半年内面试中考过)
不同路径 II (opens new window)(谷歌、美团、微软在半年内面试中考过)
不同路径 III (opens new window)(谷歌在半年内面试中考过)
零钱兑换 (opens new window)(亚马逊在半年内面试中常考)
零钱兑换 II (opens new window)(亚马逊、字节跳动在半年内面试中考过)
字典树和并查集
高级搜索
红黑树和AVL树
- 实现 Trie (前缀树) (opens new window)
- 省份数量 (opens new window)
- 岛屿数量 (opens new window)
- 被围绕的区域 (opens new window)
- 有效的数独 (opens new window)
- 括号生成 (opens new window)
- 单词接龙 (opens new window)
- 最小基因变化 (opens new window)
位运算
- 位 1 的个数 (opens new window)
- 2 的幂 (opens new window)
- 颠倒二进制位 (opens new window)
- 比特位计数 (opens new window)
布隆过滤器 LRU缓存
排序算法
高级动态规划
字符串算法
刷题路线
基础
深度优先搜索
- 二叉树的最大深度 (opens new window)(简单)
- 路径总和 (opens new window)(简单)
- 路径总和 II (opens new window)(中等)
- 被围绕的区域 (opens new window)(中等)
- 岛屿数量 (opens new window)(中等)
- 岛屿的最大面积 (opens new window)(中等)
- 在二叉树中分配硬币 (opens new window)(中等)
回溯
- 括号生成 (opens new window)(中等)
- N 皇后 (opens new window)(困难)
- N 皇后 II (opens new window)(困难)
- 解数独 (opens new window) (中等)
- 不同路径 III (opens new window)(困难)
- 单词搜索 (opens new window)(中等)
分治
- 搜索二维矩阵 II (opens new window)(中等)
- 合并 K 个排序链表 (opens new window)(中等)
- 为运算表达式设计优先级 (opens new window)(中等)
- 给表达式添加运算符 (opens new window)(困难)
- 数组中的第 K 个最大元素 (opens new window)(中等)
- 最接近原点的 K 个点 (opens new window)(中等)
- 鸡蛋掉落 (opens new window)(困难)
动态规划
- 使用最小花费爬楼梯 (opens new window)(简单)
- 爬楼梯 (opens new window)(简单)
- 不同路径 (opens new window)(中等)
- 最小路径和 (opens new window) (中等)
- 最大子序和 (opens new window) (简单)
- 乘积最大子数组 (opens new window)(中等)
- 买卖股票的最佳时机 (opens new window)(简单)
- 买卖股票的最佳时机 II (opens new window)(简单)
- 买卖股票的最佳时机 III (opens new window)(困难)
- 买卖股票的最佳时机 IV (opens new window)(困难)
- 最佳买卖股票时机含冷冻期 (opens new window)(中等)
- 买卖股票的最佳时机含手续费 (opens new window)(中等)
- 零钱兑换 (opens new window) (中等)
- 零钱兑换 II (opens new window)(中等)
- 编辑距离 (opens new window)(困难)
- 不同的子序列 (opens new window)(困难)
- 柱状图中最大的矩形 (opens new window)(困难)
- 最大矩形 (opens new window)(困难)
- 最大正方形 (opens new window)(中等)
- 最低票价 (opens new window)(中等)
- 区域和检索 - 数组不可变 (opens new window)(简单)
- 二维区域和检索 - 矩阵不可变 (opens new window)(中等)
- 最长上升子序列 (opens new window) (中等)
- 鸡蛋掉落 (opens new window)(困难)