Linked List
-
巧妙的构造虚拟头结点。可以使遍历处理逻辑更加统一。
-
灵活使用递归。构造递归条件,使用递归可以巧妙的解题。不过需要注意有些题目不能使用递归,因为递归深度太深会导致超时和栈溢出。
-
链表区间逆序。第92题。
-
链表寻找中间节点。第876题。链表寻找倒数第n个节点。第19题。只需要-次遍历就可以得到答案。
-
合并K个有序链表。第21题,第23题。
-
链表归类。第86题,第328题。
-
链表排序,时间复杂度要求O(n * logn),空间复杂度0(1)。只有一种做法,归并排序,至顶向下归并。第148题。
-
判断链表是否存在环,如果有环,输出环的交叉点的下标;判断2个链表是否有交叉点,如果有交叉点,输出交叉点。第141题,第142题,第160题。
Segment Tree
-
线段数的经典数组实现写法。将合并两个节点pushUp逻辑抽象出来了,可以实现任意操作(常见的操作有:加法,取max, min等等)。第218题,第303题,第307题,第699题。
-
计数线段树的经典写法。第315题,第327题,第493题。
-
线段树的树的实现写法。第715题,第732题。
-
区间懒惰更新。第218题,第699题。
-
离散化。离散化需要注意一个特殊情况:假如三个区间为[1,10] [1,4] [6,10],离散化后x[1]=1,x[2]=4,x[3]=6,x[4]=10。第一个区间为[1,4],第二个区间为[1,2],第三个区间为[3,4],这样一来,区间一=区间二+区间三,这和离散前的模型不符,离散前,很明显,区间一>区间二+区间三。正确的做法是:在相差大于1的数间加一个数,例如在上面1 46 10中间加5,即可x[1]=1,x[2]=4,x[3]=5,x[4]=6,x[5]=10。这样处理之后,区间一是1-5,区间二是1-2,区间三是4-5。
-
灵活构建线段树。线段树节点可以存储多条信息,合并两个节点的pushUp操作也可以是多样的。第850题,第1157题。
Sliding Window
- 双指针滑动窗口的经典写法。右指针不断往右移,移动到不能往右移动为止(具体条件根据题目而定)。当右指针到最右边以后,开始挪动左指针,释放窗口左边界。第3题,第76题,第209题,第424题,第438题,第567题,第713题,第763题,第845题,第881题,第904题,第978题,第992题,第1004题,第1040题,第1052题。
Sort
-
深刻的理解多路快排。第75题。
-
链表的排序,插入排序(第147题)和归并排序(第148题)
-
桶排序和基数排序。第164题。
-
“摆动排序”。第324题。
-
两两不相邻的排序。第767题,第1054题。
-
“饼子排序”。第969题。
Union Find
-
灵活使用并查集的思想,熟练掌握并查集的模板,模板中有两种并查集的实现方式,-种是路径压缩+秩优化的版本,另外一种是计算每个集合中元素的个数+最大集合元素个数的版本,这两种版本都有各自使用的地方。能使用第一类并查集模板的题目有:第128题,第130题,第547题,第684题,第721题,第765题,第778题,第839题,第924题,第928题,第947题,第952题,第959题,第990题。能使用第二类并查集模板的题目有:第803题,第952题。第803题秩优化和统计集合个数这些地方会卡时间,如果不优化,会TLE。
-
并查集是一种思想,有些题需要灵活使用这种思想,而不是死套模板,如第399题,这一题是stringUnionFind,利用并查集思想实现的。这里每个节点是基于字符串和map的,而不是单纯的用int节点编号实现的。
-
有些题死套模板反而做不出来,比如第685题,这一题不能路径压缩和秩优化,因为题目中涉及到有向图,需要知道节点的前驱节点,如果路径压缩了,这一题就没法做了。这一题不需要路径压缩和秩优化。
-
灵活的抽象题目给的信息,将给定的信息合理的编号,使用并查集解题,并用map降低时间复杂度,如第721题,第959题。
-
关于地图,砖块,网格的题目,可以新建一个特殊节点,将四周边缘的砖块或者网格都union()到这个特殊节点上。第130题,第803题。
-
能用并查集的题目,一般也可以用DFS和BFS解答,只不过时间复杂度会高一点。
Leetcode题解
==========
4. Median of Two Sorted Arrays
17. Letter Combinations of a Phone Num ber
51. N-Queens
84. Largest Rectangle in Histogram
114. Flatten Binary Tree to Linked List
199. Binary Tree Right Side View
237. Delete Node in a Linked List
463. lsland Perimeter
500. Keyboard Row
1105. Filling, Bookcase Shelves
1145. Binary Tree Coloring Game
1302. Deepest Leaves Sum
第二份力扣算法刷题宝典(标星68k)
==================
第一章、动态规划系列
背包问题之零钱兑换
经典动态规划问题:高楼扔鸡蛋(进阶)
贪心算法之区间调度问题
团灭LeetCode股票买卖问题
第二章、数据结构系列
二叉堆详解实现优先级队列
LRU算法详解
特殊数据结构:单调队列
队列实现栈|栈实现队列
第三章、算法思维系列
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
/img-blog.csdnimg.cn/img_convert/90e53f1b4d77e5ea7ab2d94860b092fc.png)
第三章、算法思维系列
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
[外链图片转存中…(img-s8hdDcgn-1714551441293)]
[外链图片转存中…(img-Sy0AASRq-1714551441294)]
[外链图片转存中…(img-hpLzmVVo-1714551441294)]