Leetcode面试高频题分类刷题总结及题解(更新中)

原文链接:Leetcode面试高频题分类刷题总结

排序类(Sort)

注意:后两题是与快速排序非常相似的快速选择(Quick Select)算法,面试中很常考

链表类(Linked List)

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

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

二分法(Binary Search)

双指针(2 Pointer)

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

深度优先搜索(DFS):面试中最常考的

前缀和(Prefix Sum)


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

并查集(Union Find)

  • 基础知识:如果数据不是实时变化,本类问题可以用BFS或者DFS的方式遍历,如果数据实时变化(data stream)则并查集每次的时间复杂度可以视为O(1);需要牢记合并与查找两个操作的模板

  • 常见题目:

字典树(Trie)

  • 基础知识:(https://zh.wikipedia.org/wiki/Trie);多数情况下可以通过用一个set来记录所有单词的prefix来替代,时间复杂度不变,但空间复杂度略高

  • 常见题目:

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

  • 基础知识:单调栈一般用于解决数组中找出每个数字的第一个大于/小于该数字的位置或者数字;单调队列只见过一道题需要使用;不论单调栈还是单调队列,单调的意思是保留在栈或者队列中的数字是单调递增或者单调递减的

  • 常见题目:

扫描线算法(Sweep Line)

TreeMap

  • 基础知识:基于红黑树(平衡二叉搜索树)的一种树状 hashmap,增删查改、找求大最小均为logN复杂度,Python当中可以使用SortedDict替代;SortedDict继承了普通的dict全部的方法,除此之外还可以peekitem(k)来找key里面第k大的元素,popitem(k)来删除掉第k大的元素,弥补了Python自带的heapq没法logN时间复杂度内删除某个元素的缺陷;最近又在刷一些hard题目时候突然发现TreeMap简直是个神技,很多用别的数据结构写起来非常麻烦的题目,TreeMap解决起来易如反掌。
  • 常见题目:
    • Leetcode 729 My Calendar I
    • Leetcode 981 Time Based Key-Value Store
    • Leetcode 846 Hand of Straights
    • Leetcode 218 The Skyline Problem
    • Leetcode 480. Sliding Window Median (这个题用TreeMap超级方便)
    • Leetcode 318 Count of Smaller Numbers After Self (这个题线段树、二分索引树、TreeMap都可以)

动态规划(Dynamic Programming)

posted @ 2022-12-30 21:37  Frodo1124  阅读(2538)  评论(3编辑  收藏  举报