不知不觉到了要面试的年纪了,已经完全成为老登了(悲
记录一下面试复习帖吧(虽然感觉csdn已经完全凉掉了= =)
- 160. 相交链表 - 力扣(LeetCode)
- 直接遍历,没啥好说的
- 236. 二叉树的最近公共祖先 - 力扣(LeetCode)
- 每步 在左右子树去找p或q。如果左右子树各找到一个,则当前节点为lca(p,q);否则继续往左儿子/右儿子遍历。
- 扩:倍增/树剖求LCA
- 234. 回文链表 - 力扣(LeetCode)
- #快慢指针
- 快慢指针找中点(其实就是快指针到末尾时慢指针自然就到一半了),O(n/2)
- 反转前半条链表
- 比较
- 739. 每日温度 - 力扣(LeetCode)
- #单调栈/单调队列
- 226. 翻转二叉树 - 力扣(LeetCode)
- 递归解法显然
- 扩:二叉树的非递归式遍历
- 221. 最大正方形 - 力扣(LeetCode)
- #前缀和
- 求二维前缀和,只要正方格内总和=格子数,则是全1正方形
1*1+2*2+3*3+...+n*n=O(n^3)
- #动态规划
dp[i,j]表示以(i,j)为右下角,只包含1的正方形的边长- 若
(i,j)格为1:dp(i,j)=min{dp(i-1,j),dp(i-1,j-1),dp(i,j-1)}+1 - 否则:
dp(i,j)=0
- #前缀和
- 215. 数组中的第K个最大元素 - 力扣(LeetCode)
- #排序 #二分
- 扩:排序算法
- 208. 实现 Trie (前缀树) - 力扣(LeetCode)
- #Trie
- Trie实现
- 207. 课程表 - 力扣(LeetCode)
- #拓扑
- 拓扑排序实现
- 206. 反转链表 - 力扣(LeetCode)
- 200. 岛屿数量 - 力扣(LeetCode)
- #深搜 #广搜
- 198. 打家劫舍 - 力扣(LeetCode)
- #动态规划
- 易错点:当成贪心
- 169. 多数元素 - 力扣(LeetCode)
- #STL #排序 #分治
- 法一:用map记录i出现次数,同时维护maxcnt,maxcnt_i
- 法二:排序+取中点
- 法三:分治
- 238. 除了自身以外数组的乘积 - 力扣(LeetCode)
- #前缀和
- 前缀和的变种,维护前缀积、后缀积
- 155. 最小栈 - 力扣(LeetCode)
- #单调栈/单调队列
- 最小栈的实现
- 152. 乘积最大子数组 - 力扣(LeetCode)
- #双指针 #前缀和 #动态规划
- 法一:前缀和变种,维护前缀积,和min_pos、max_pos、max_neg、min_neg的位置
- 法二:动态规划,注意分max,min
- 148. 排序链表 - 力扣(LeetCode)
- 归并排序的链表实现?
- 实现
- 146. LRU 缓存 - 力扣(LeetCode)
- map + 双向链表
- 142. 环形链表 II - 力扣(LeetCode)
- #快慢指针
- 判断链表是否有环:快慢指针相遇
- 如何找到这个环的入口:从头节点和相遇节点同时查找,相遇处即为环的入口
- 推导:
- 设头节点到环入口x步,环入口到相遇节点y步,相遇节点到环入口z步
- 则快慢节点相遇时
- 慢指针走了x+y步
- 快指针走了x+n(y+z)步
- 有
(x+y)*2=x+n(y+z) - 解得
x=(n-1)(y+z)+z
- 推导:
- 141. 环形链表 - 力扣(LeetCode)