算法框架模板
2021-12-21 04:29:45 2 举报
AI智能生成
面试必刷题,本人通过此模板找到多个大厂offer
作者其他创作
大纲/内容
树(刷题的基础)
二叉树刷题第一期
226. 翻转二叉树
https://leetcode-cn.com/problems/invert-binary-tree/
思路(这里需要掌握的是先序遍历)
preorder
BFS
模板
preorder
BFS
116. 填充每个节点的下一个右侧节点指针
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
思路
preorder
BFS
模板
preorder
BFS
114. 二叉树展开为链表
https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/
思路
postorder
递归过程
模板
postorder
二叉树刷题第二期
654. 最大二叉树
https://leetcode-cn.com/problems/maximum-binary-tree/
思路
preorder
子主题
模板
preorder
105. 从前序与中序遍历序列构造二叉树
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
思路
preorder
图解思路
非递归实现
模板
preorder
https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/
思路
preorder
非递归实现
模板
preorder
二叉树刷题第三期
652. 寻找重复的子树
https://leetcode-cn.com/problems/find-duplicate-subtrees/
思路
postorder
模板
postorder
二叉搜索树刷题第一期
子主题
核心套路模板
动态规划
斐波那契额数列
https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/
思路
dp table
- 自底向上
memo(不推荐)
- 自顶向下
空间压缩
类似问题
https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/
好看
找零钱问题
https://leetcode-cn.com/problems/coin-change/
思路
利于初学这看的代码
优化后
类似的问题:
https://leetcode-cn.com/problems/coin-change-2/
总结模板
回溯算法
全排列问题
https://leetcode-cn.com/problems/permutations/
思路
类似问题
https://leetcode-cn.com/problems/permutations-ii/
N皇后问题
https://leetcode-cn.com/problems/n-queens/
思路
类似问题
https://leetcode-cn.com/problems/n-queens-ii/
总结模板
BFS
算法框架
二叉树的最小高度
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
思路
BFS
- 推荐使用BFS
DFS
分治
解开密码锁的最少次数
https://leetcode-cn.com/problems/open-the-lock/
思路
练习题目(二叉树的层序遍历)
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/
https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/
双指针
快、慢指针
https://leetcode-cn.com/problems/linked-list-cycle/
思路
类似题目
https://leetcode-cn.com/problems/linked-list-cycle-ii/
https://leetcode-cn.com/problems/middle-of-the-linked-list/
https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/
左、右指针
https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
思路
类似题目
https://leetcode-cn.com/problems/container-with-most-water/
https://leetcode-cn.com/problems/sort-colors/
前面那个双指针的命名不容易理解,这样命名更容易理解
二分查找
算法框架
寻找一个数
寻找左测边界的二分搜索
子主题
寻找右侧边界的二分搜索
同一模板
口诀:二分查找随便写,左侧边界while右,补丁左;右侧边界while左,补丁右
滑动窗口
模板框架
最小覆盖字串
https://leetcode-cn.com/problems/minimum-window-substring/
思路
模板
字符串排列
https://leetcode-cn.com/problems/permutation-in-string/
思路
找所有字母异位词
https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/
思路
最长无重复子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
思路
动态规划系列
动态规划的设计:最长递增子序列
https://leetcode-cn.com/problems/longest-increasing-subsequence/
思路(重点)
- 常规DP
思路(P100)
- 二分查找
二维递增子序列:信封嵌套问题
https://leetcode-cn.com/problems/russian-doll-envelopes/
思路
最大子数组问题
https://leetcode-cn.com/problems/maximum-subarray/
思路
- 常规思路
思路
- 空间压缩
经典动态规划:最长公共子序列
https://leetcode-cn.com/problems/longest-common-subsequence/
思路
经典动态规划:编辑距离
https://leetcode-cn.com/problems/edit-distance/
思路
还有优化思路(P129)
子序列问题解题模板:最长回文子序列
https://leetcode-cn.com/problems/longest-palindromic-subsequence/
思路
- 常规DP
思路
- 空间压缩
以最小插入次数构造回文串
https://leetcode-cn.com/problems/minimum-insertion-steps-to-make-a-string-palindrome/
思路
- 常规DP
思路
- 空间压缩
动态规划之正则表达式
https://leetcode-cn.com/problems/regular-expression-matching/
思路
- 正常思路
思路
- 消除重复子问题(DP)(奇妙的思想)
不同定义产生不同的解法
https://www.lintcode.com/problem/867/
思路
子主题
常规知识
xxx
子串:连续的一串数字/字符。比如{5,6,8,9,4,0,15,4,7}中最长递增子串{5,6,8,9},即使15在后面比9大也不能算
子序列:一串数组/字符(可以是不连续的)。比如{5,6,8,9,4,0,15,4,7}中最长递增子串{5,6,8,9,15}
子数组:基本和子串是一个意思,只不过子串是字符串,子数组是一个数组(对应的题牛客:最长不重复子数组)
数据结构系列
LRU缓存淘汰策略
https://leetcode-cn.com/problems/lru-cache/
思路
手写LFU算法
二叉搜索树操作锦集
100. 相同的树
https://leetcode-cn.com/problems/same-tree/
代码
98. 验证二叉搜索树
(leetcode)
(leetcode)
https://leetcode-cn.com/problems/validate-binary-search-tree/
代码
700. 二叉搜索树中的搜索
https://leetcode-cn.com/problems/search-in-a-binary-search-tree/
代码:二叉树通用
(就直接傻搜)
(就直接傻搜)
代码:BST
701. 二叉搜索树中的插入操作
https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
代码
450. 删除二叉搜索树中的节点
https://leetcode-cn.com/problems/delete-node-in-a-bst/
代码
总结:BST模板
完全二叉树的节点数为什么那么难算
概念介绍
222. 完全二叉树的节点个数
https://leetcode-cn.com/problems/count-complete-tree-nodes/submissions/
代码:普通二叉树(最菜)
代码:满二叉树
代码:完全二叉树做法
各种遍历框架序列化和反序列化二叉树
297. 二叉树的序列化与反序列化
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
代码:先序遍历
代码:后续遍历
代码:层序遍历
(记不住)
(记不住)
代码:中序遍历
Git原理之二叉搜索树
236. 二叉树的最近公共祖先
(leetcode)
(leetcode)
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
代码
后续遍历
后续遍历
235. 二叉搜索树的最近公共祖先
(leetcode)
(leetcode)
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
代码
特殊的数据结构:单调栈
特殊的数据结构:单调队列
如何判断回文链表
234. 回文链表
https://leetcode-cn.com/problems/palindrome-linked-list/submissions/
代码
- 先将链表的每个节点都入栈,在出栈和原链表进行判断(这里的栈用的递归栈)
代码
- 先使用快慢指针找到链表的中间节点,再将后半段链表翻转和前半段进行判断
- 最优
秀操作之递归翻转链表
206. 反转链表
https://leetcode-cn.com/problems/reverse-linked-list/
代码
- 递归
- 模板
代码
- 迭代
代码
- 利用栈
92. 反转链表 II
https://leetcode-cn.com/problems/reverse-linked-list-ii/
代码
秀操作之K个一组翻转链表
25. K 个一组翻转链表
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
代码
算法思维系列
回溯算法解决子集、排列、组合问题
78. 子集
https://leetcode-cn.com/problems/subsets/
代码
90. 子集 II
https://leetcode-cn.com/problems/subsets-ii/
代码
77. 组合
https://leetcode-cn.com/problems/combinations/
代码
39. 组合总和
https://leetcode-cn.com/problems/combination-sum/
代码
https://leetcode-cn.com/problems/combination-sum-ii/
代码
216. 组合总和 III
https://leetcode-cn.com/problems/combination-sum-iii/
代码
377. 组合总和 Ⅳ
https://leetcode-cn.com/problems/combination-sum-iv/
代码
- 回溯法:leetcode超时
代码
- 动态规划(找零钱问题变种)
46. 全排列
https://leetcode-cn.com/problems/permutations/
代码
- 回溯
代码
- 回溯+交换
47. 全排列 II
https://leetcode-cn.com/problems/permutations-ii/
代码
小结
例题是78、77、46,其它都是练习题
回溯算法的最佳实践:解数独
37. 解数独
https://leetcode-cn.com/problems/sudoku-solver/
代码
36. 有效的数独
https://leetcode-cn.com/problems/valid-sudoku/
代码
回溯算法最佳实践:括号生成
https://leetcode-cn.com/problems/generate-parentheses/
代码
BFS算法暴力各种智力题
2Sum问题的核心思想
https://leetcode-cn.com/problems/two-sum/
https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
双重for_loop代码
- 时间复杂度O(N ^ 2)
HashMap代码
- 时间复杂度O(N)
双指针思想代码(leetcode是不能执行的,因为这个题需要返回的是下标)
- 总结套路模板
- 这个题不能使用双指针,因为需要返回下标,而双指针使用的前提条件必须对双指针进行排序
一个函数解决nSum问题
15. 三数之和
https://leetcode-cn.com/problems/3sum/
代码
代码
- n数之和模板
18. 四数之和
https://leetcode-cn.com/problems/4sum/
代码(练习 + 理解度)
- 刷代码的熟练度,直接写这个
代码(面试)
- n数之和模板
n数之和
代码
拆解复杂问题:实现计算器
摊烧饼也得有点递归思想
969. 煎饼排序
https://leetcode-cn.com/problems/pancake-sorting/
代码
前缀和技巧解决子数组问题
https://leetcode-cn.com/problems/subarray-sum-equals-k/
代码
代码优化
- 优化思路:类似两数之和的HashMap做法
前缀和技巧:主要用于处理数组区间问题。
- 比如:查询某个分数段的认数或百分比
扁平化嵌套列表(未做)
341. 扁平化嵌套列表迭代器
https://leetcode-cn.com/problems/flatten-nested-list-iterator/
子主题
高频面试系列
如何高效的寻找素数
204. 计数质数
https://leetcode-cn.com/problems/count-primes/
代码
时间复杂度:O(N ^ 2)
时间复杂度:O(N ^ 2)
代码:(leetcode超时)
时间复杂度:O(N * sqrt(num))
时间复杂度:O(N * sqrt(num))
高效求解代码
- 第一版
高效求解代码
- 第二版
如何高效进行模幂运算
372. 超级次方
https://leetcode-cn.com/problems/super-pow/
代码
- 小心溢出
优化了一点的代码
50. Pow(x, n)
https://leetcode-cn.com/problems/powx-n/
代码
如何运用二分搜索
https://leetcode-cn.com/problems/koko-eating-bananas/
代码(leetcode会超时)
优化代码
- 二分搜索
1011. 在 D 天内送达包裹的能力
https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/
代码
如何高效解决接雨水问题
42. 接雨水
https://leetcode-cn.com/problems/trapping-rain-water/
代码
- 暴力法
- 时间复杂度:O(N ^ 2)
- 空间复杂度:O(1)
代码
- 备忘录法
- 时间复杂度:O(N)
- 空间复杂度:O(N)
代码
- 双指针
- 时间复杂度:O(N)
- 空间复杂度:O(1)
407. 接雨水 II(不会)
https://leetcode-cn.com/problems/trapping-rain-water-ii/
代码
如何去除有序数组的重复元素
26. 删除有序数组中的重复项
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
代码
82. 删除排序链表中的重复元素 II
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
代码(这个不是leetcode的题解)
代码
- 虚拟头节点,直接遍历
如何寻找最长回文子串
5. 最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/
代码
如何运用贪心思想玩跳跃游戏
55. 跳跃游戏
https://leetcode-cn.com/problems/jump-game/
代码
45. 跳跃游戏 II
https://leetcode-cn.com/problems/jump-game-ii/
代码
- 动态规划(备忘录法)
代码
- 贪心思想
如何运用贪心做时间管理
区间调度(leecode没有)
找出这些区间中最多有几个互不相交
代码
https://leetcode-cn.com/problems/non-overlapping-intervals/
代码
452. 用最少数量的箭引爆气球
https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/
代码
如何判定括号合法性
20. 有效的括号
https://leetcode-cn.com/problems/valid-parentheses/
代码
如何调度考生的座位
Union-Find算法详解
Union-Find算法应用
一行代码就能解决的算法题
292. Nim 游戏
https://leetcode-cn.com/problems/nim-game/
代码
877. 石子游戏
https://leetcode-cn.com/problems/stone-game/
代码
319. 灯泡开关
https://leetcode-cn.com/problems/bulb-switcher/
代码
公众号补充
股票问题
算法小技巧
回溯算法
要知道进入下层决策的是for(int i = ?; i < nums.length; i++)循环中的i
尽量使用ArrayList,效率高。如果需要适用track.contains()方法就是用LinkedList
适用剪枝优化时要判断数组是否需要排序
模板1
模板2
(排序)
(排序)
排序算法的比较器
判断情况的写(什么情况都正确)
快速写法(在一定情况下是错误的,比如负数与正数在比较,全正数或全负数是正确的)
String和Integer的常用方法
string.split(String str):将string字符串按照str进行分割
Integer.parseInt(String str):将str传入,返回的是int类型。比如“12”,返回12
0 条评论
下一页