爱收集资源网

Leetcode高频面试题目分类总结之后总结

网络整理 2024-02-12 02:04

前文链接:

想看笔试打算过程的在这:

强烈建议刷题前先确保基本数据结构知识已把握,不然直接刷题会被严打的光速退坑!

需要打鸡血的看这儿:

前言:

这是本人在7个月刷了500道Leetcode题目并成功领到几家北美Software Engineer Offer然后总结的Leetcode高频笔试题目分类总结。这篇是高频题目的概述性总结,以后有时间准备单独给每位门类写一个详尽的总结。希望对打算刷题笔试的你有所帮助吧,谢谢!

这里还有一篇我写的关于码农算法笔试的Q&A:

注:本文一共200多道题,算上一些附加的衍生题差不多有250+,基本上极少有easy题目,大部分都是medium,少部份hard,按照大多数人30% Easy,60% Medium, 10% Hard的刷题标准,刷好下边全部的题目相当于300题,足够应对大部分的算法笔试了。如果你对算法与数据结构基础知识把握的不够的情况下,先依照前面链接提及的基础补好再开始刷对应门类的题目,不然很容易“一个人一包烟,一道题目刷三天”。

注:作者后来在北美各个大厂几乎全部面过,G家 A家 U家之类的大厂offer也都领到过,可以确定刷好本文中的所有题以及把握每道题对应知识点可以应对绝大多数的码农算法笔试了。

如果题目/答案看不懂又不喜欢看discussion的话,现在有很多视频资源可以看。个人比较喜欢花花酱的讲解(花花酱的表世界的个人空间_哔哩哔哩_Bilibili),墙外的朋友们也可以看关神的视频讲解(youtube.com/channel/UCY5Z0of98W-YSdmPgAe1DaA)。

不建议刷的题目类型:

以下8个门类是笔试中最常考的算法与数据结构知识点。

什么是热门算法_快手热门算法_快手上热门的数据是怎么计算

排序类(Sort):

进阶题目:

注意:后两题是与快速排序十分相像的快速选择(Quick Select)算法快手热门算法,面试中很常考

链表类(Linked List):

注意:快慢表针和数组反转几乎是所有链表类问题的基础,尤其是反转数组,代码很短,建议直接背熟。

堆(Heap or Priority Queue)、栈(Stack)、队列(Queue)、哈希表类(Hashmap、Hashset):

Stack题目:Hashmap/ Hashset题目:Heap/Priority Queue题目:

二分法(Binary Search):

隐式二分法:

双指针(2 Pointer):

相向双表针:(以two sum为基础的一系列题)同向双表针:(个人认为最难的一类题,可以参考下这儿 TimothyL:Leetcode 同向双表针/滑动窗口类代码模板)

宽度优先搜索(BFS):面试中最常考的

BFS基本模板(需要记录层数或则不需要记录层数)多数情况下时间复杂度空间复杂度都是O(N+M),N为节点个数,M为边的个数基于树的BFS:不需要专门一个set来记录访问过的节点基于图的BFS:(一般须要一个set来记录访问过的节点)拓扑排序:(zh.wikipedia.org/wiki/%E6%8B%93%E6%92%B2%E6%8E%92%E5%BA%8F)

深度优先搜索(DFS):面试中最常考的(分类的稍稍有点粗糙了,没有细分出回溯/分治来,准备找个时间给每位DFS的题标记下是哪种DFS)

基于树的DFS:需要记住递归写前序中序后序遍历二叉树的模板二叉搜索树(BST):BST特点:中序遍历为单调递增的二叉树,换句话说,根节点的值比左子树任意节点值都大,比右子树任意节点值都小,增删查改均为O(h)复杂度,h为树的高度;注意不是所有的BST题目都须要递归,有的题目只须要while循环即可基于图的DFS: 和BFS一样通常须要一个set来记录访问过的节点,避免重复访问引起死循环; Word XXX 系列笔试中十分常见,例如word break,word ladder,word pattern,word search。基于排列组合的DFS: 其实与图类DFS方式一致,但是排列组合的特点更显著记忆化搜索(DFS + Memoization Search):算是用递归的形式实现动态规划,递归每次返回时同时记录下已访问过的节点特点,避免重复访问同一个节点快手热门算法,可以有效的把指数级别的DFS时间复杂度降为方程级别; 注意这一类的DFS必须在最后有返回值(分治法),不可以用回溯法; for循环的dp题目都可以用记忆化搜索的形式写,但是不是所有的记忆化搜索题目都可以用for循环的dp形式写。

前缀和(Prefix Sum)

以上内容皆为笔试中高频的知识点,以下知识点和题目在笔试中属于中等频度(大概面10道题会碰到一次),时间不足的情况下,请以打算里面的知识点为主。

并查集(Union Find):把两个或则多个集合合并为一个集合

字典树(Trie)

单调栈与单调队列(Monotone Stack/Queue)

扫描线算法(Sweep Line)

TreeMap

动态规划(Dynamic Programming)

快手热门算法