本文旨在将leetcode的题型分类
滑动窗口类型的题目经常是用来执行数组或是链表上某个区间(窗口)上的操作。比如找最长的全为1的子数组长度。滑动窗口一般从第一个元素开始,一直往右边一个一个元素挪动。
Leetcode | Java | Python |
---|---|---|
209. Minimum Size Subarray Sum | Java | Python |
Leetcode | Java | Python |
---|---|---|
Leetcode.3 Longest Substring Without Repeating Characters | Java | |
Leetcode.76 Minimum Window Substring | Java | |
Leetcode.438 Find All Anagrams in a String | Java |
双指针是这样的模式:两个指针朝着左右方向移动(双指针分为同向双指针和异向双指针),直到他们有一个或是两个都满足某种条件。
使用双指针的优势:若只用一个指针,需多次循环找到你需要的答案,此时将耗时和浪费空间。
Leetcode | Java | Python |
---|---|---|
11. Container With Most Water | Python | |
26. Remove Duplicates from Sorted Array | Python | |
27. Remove Element | Python | |
75. Sort Colors | Python | |
80. Remove Duplicates from Sorted Array II | Python | |
88. Merge Sorted Array | Python | |
125. Valid Palindrome | python | |
167. Two Sum II - Input array is sorted | Python | |
209. Minimum Size Subarray Sum | Python | |
215. Kth Largest Element in an Array | Python | |
283. Move Zeroes | Python | |
344. Reverse String | Python | |
345. Reverse Vowels of a String | Python |
区间合并模式是一个用来处理有区间重叠的很高效的技术。在设计到区间的很多问题中,通常咱们需要要么判断是否有重叠,要么合并区间,如果他们重叠的话。
Leetcode | Java | Python |
---|---|---|
利用哈希表以空间换时间
Leetcode | Java | Python |
---|---|---|
167. Two Sum II - Input array is sorted | Python | |
202. Happy Number | Java | |
242. Valid Anagram | Java | |
290. Word Pattern | Java | |
350. Intersection of Two Arrays II | Java | |
719. Find K-th Smallest Pair Distance | Java |
Leetcode | Java | Python |
---|---|---|
220. Contains Duplicate III | Java | |
这种模式讲述的是一直很好玩的方法:可以用来处理数组中的数值限定在一定的区间的问题。
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|
2. Add Two Numbers | Java | |
21. Merge Two Sorted Lists | Java | |
24. Swap Nodes in Pairs | Java | |
25. Reverse Nodes in k-Group | ||
82. Remove Duplicates from Sorted List II | Java | |
83. Remove Duplicates from Sorted List | Java | |
86. Partition List | Java | |
92. Reverse Linked List II | Java | |
203. Remove Linked List Elements | Java | |
206. Reverse Linked List | Java | |
328. Odd Even Linked List | Java | |
445. Add Two Numbers II | Java | |
这种模式基于宽搜(Breadth First Search (BFS)),适用于需要遍历一颗树。借助于队列数据结构,从而能保证树的节点按照他们的层数打印出来。打印完当前层所有元素,才能执行到下一层。所有这种需要遍历树且需要一层一层遍历的问题,都能用这种模式高效解决。
Leetcode | Java | Python |
---|---|---|
树形DFS基于深搜(Depth First Search (DFS))技术来实现树的遍历。
咱们可以用递归(或是显示栈,如果你想用迭代方式的话)来记录遍历过程中访问过的父节点。
Leetcode | Java | Python |
---|---|---|
很多问题中,我们被告知,我们拿到一大把可以分成两队的数字。为了解决这个问题,我们感兴趣的是,怎么把数字分成两半?使得:小的数字都放在一起,大的放在另外一半。双堆模式就能高效解决此类问题。
正如名字所示,该模式用到了两个堆,是不是很难猜?一个最小堆用来找最小元素;一个最大堆,拿到最大元素。这种模式将一半的元素放在最大堆中,这样你可以从这一堆中秒找到最大元素。同理,把剩下一半丢到最小堆中,O(1)时间找到他们中的最小元素。通过这样的方式,这一大堆元素的中位数就可以从两个堆的堆顶拿到数字,从而计算出来。
Leetcode | Java | Python |
---|---|---|
超级多的编程面试问题都会涉及到排列和组合问题。子集问题模式讲的是用BFS来处理这些问题。
Leetcode | Java | Python |
---|---|---|
当你需要解决的问题的输入是排好序的数组,链表,或是排好序的矩阵,要求咱们寻找某些特定元素。这个时候的不二选择就是二分搜索。这种模式是一种超级牛的用二分来解决问题的方式。
Leetcode | Java | Python |
---|---|---|
任何让我们求解最大/最小/最频繁的K个元素的题,都遵循这种模式。
用来记录这种前K类型的最佳数据结构就是堆了(译者注:在Java中,改了个名,叫优先队列(5))。这种模式借助堆来解决很多这种前K个数值的问题。
Leetcode | Java | Python |
---|---|---|
215. Kth Largest Element in an Array | Python | |
K路归并能帮咱们解决那些涉及到多组排好序的数组的问题。
每当你的输入是K个排好序的数组,你就可以用堆来高效顺序遍历其中所有数组的所有元素。你可以将每个数组中最小的一个元素加入到最小堆中,从而得到全局最小值。当我们拿到这个全局最小值之后,再从该元素所在的数组里取出其后面紧挨着的元素,加入堆。如此往复直到处理完所有的元素。
Leetcode | Java | Python |
---|---|---|
拓扑排序模式用来寻找一种线性的顺序,这些元素之间具有依懒性。比如,如果事件B依赖于事件A,那A在拓扑排序顺序中排在B的前面。
这种模式定义了一种简单方式来理解拓扑排序这种技术。
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|
Leetcode | Java | Python |
---|---|---|