Skip to main content

规划 Roadmap

重点学习:滑动窗口、二分、位运算、动态规划、字符串、图论、数学、贪心、常用数据结构(前缀和、堆栈、线段树)。

基础算法精讲题单,来自 灵茶山艾府​

视频精讲题目代码备注
相向双指针 1167. 两数之和 II - 输入有序数组 / Two Sum II - Input Array Is Sorted
LeetCode 中文站 · LeetCode 国际站
简要题意: 在非递减数组中找到两个不同位置,使元素和为 target,返回从 1 开始的下标;保证恰有一组答案,要求常数额外空间。
代码
15. 三数之和 / 3Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回数组中所有由三个不同位置组成、元素之和为 0 的三元组。相同数值的三元组只返回一次,结果顺序不限。
代码包含两个优化
2824. 统计和小于目标的下标对数目 / Count Pairs Whose Sum is Less than Target
LeetCode 中文站 · LeetCode 国际站
简要题意: 统计数组中下标 i 小于 j 且 nums[i] + nums[j] 小于 target 的数对数量。
代码*课后作业
16. 最接近的三数之和 / 3Sum Closest
LeetCode 中文站 · LeetCode 国际站
简要题意: 从整数数组中选取三个不同位置的数,返回最接近目标值 target 的三数之和。
代码*课后作业
18. 四数之和 / 4Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 找出数组中四个不同位置、元素和为 target 的所有不重复四元组。
代码*课后作业
611. 有效三角形的个数 / Valid Triangle Number
LeetCode 中文站 · LeetCode 国际站
简要题意: 从非负整数数组中选择三个不同下标,统计对应长度能组成非退化三角形的三元组数量。
代码*课后作业
相向双指针 211. 盛最多水的容器 / Container With Most Water
LeetCode 中文站 · LeetCode 国际站
简要题意: 在下标 i 处竖起高度为 height[i] 的线段。选择两条线段,与横轴构成容器。容量为两线段距离乘较短高度,返回最大容量。
代码
42. 接雨水 / Trapping Rain Water
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定宽度均为 1 的非负柱高数组,计算下雨后柱子之间能储存的总水量。
代码额外讲了前后缀分解
滑动窗口209. 长度最小的子数组 / Minimum Size Subarray Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 在正整数数组 nums 中,找和至少为 target 的最短非空连续子数组,返回长度;不存在时返回 0。
代码最短
3. 无重复字符的最长子串 / Longest Substring Without Repeating Characters
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定字符串,返回不含重复字符的最长连续子串长度。
代码最长
713. 乘积小于 K 的子数组 / Subarray Product Less Than K
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定正整数数组,统计元素乘积严格小于 k 的非空连续子数组数量。
代码方案数
2958. 最多 K 个重复元素的最长子数组 / Length Of Longest Subarray With At Most K Frequency
LeetCode 中文站 · LeetCode 国际站
简要题意: 找到最长连续子数组,要求其中每个数字出现次数都不超过 k,返回长度。
代码*课后作业
2730. 找到最长的半重复子字符串 / Find The Longest Semi Repetitive Substring
LeetCode 中文站 · LeetCode 国际站
简要题意: 找到最长连续子串,使其中至多出现一对相邻且相等的字符,返回其长度。
代码*课后作业
1004. 最大连续 1 的个数 III / Max Consecutive Ones III
LeetCode 中文站 · LeetCode 国际站
简要题意: nums 只含 0 和 1。最多将 k 个 0 翻转为 1,返回可以得到的最长连续 1 的长度。
代码*课后作业
2962. 统计最大元素出现至少 K 次的子数组 / Count Subarrays Where Max Element Appears At Least K Times
LeetCode 中文站 · LeetCode 国际站
简要题意: 统计非空连续子数组的数量,要求整个数组的最大元素在子数组中至少出现 k 次。
代码*课后作业
2302. 统计得分小于 K 的子数组数目 / Count Subarrays With Score Less Than K
LeetCode 中文站 · LeetCode 国际站
简要题意: 正整数数组中,子数组得分为元素和乘以长度,统计得分严格小于 k 的非空连续子数组数。
代码*课后作业
1658. 将 x 减到 0 的最小操作数 / Minimum Operations To Reduce X To Zero
LeetCode 中文站 · LeetCode 国际站
简要题意: 每次删除数组最左或最右的元素,并从 x 中减去其值,求使 x 恰好变为 0 的最少次数;无法完成则返回 -1。
代码*课后作业
1234. 替换子串得到平衡字符串 / Replace The Substring For Balanced String
LeetCode 中文站 · LeetCode 国际站
简要题意: 字符串只含 Q、W、E、R,长度是 4 的倍数;替换一个最短子串,使四种字符各占总长度的四分之一,返回最短长度。
代码*课后作业
76. 最小覆盖子串 / Minimum Window Substring
LeetCode 中文站 · LeetCode 国际站
简要题意: 在字符串 s 中找到包含 t 全部字符及其重复次数的最短连续子串;不存在则返回空串。
代码*课后作业
二分查找34. 在排序数组中查找元素的第一个和最后一个位置 / Find First and Last Position of Element in Sorted Array
LeetCode 中文站 · LeetCode 国际站
简要题意: nums 按非递减顺序排列。返回 target 的首次与末次出现下标;不存在则返回 [-1,-1]。要求 O(log n) 时间。
代码三种写法
2529. 正整数和负整数的最大计数 / Maximum Count of Positive Integer and Negative Integer
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定非递减整数数组,分别统计正数和负数个数,返回两者的较大值,0 不计入任一类。
代码*课后作业
2300. 咒语和药水的成功对数 / Successful Pairs Of Spells And Potions
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定咒语和药水的强度,对每个咒语统计与之强度乘积至少达到 success 的药水数量。
代码*课后作业
2563. 统计公平数对的数目 / Count The Number Of Fair Pairs
LeetCode 中文站 · LeetCode 国际站
简要题意: 统计满足 i 小于 j 且两数之和位于闭区间 [lower, upper] 的下标对数量。
代码*课后作业
2080. 区间内查询数字的频率 / Range Frequency Queries
LeetCode 中文站 · LeetCode 国际站
简要题意: 设计查询结构,对给定闭区间 [left, right] 和 value,返回该值在原数组该区间内出现的次数。
代码*课后作业
275. H 指数 II / H-Index II
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定按非递减顺序排列的引用次数,求最大的 h,使至少 h 篇论文各被引用至少 h 次,要求对数时间复杂度。
代码*课后作业
875. 爱吃香蕉的珂珂 / Koko Eating Bananas
LeetCode 中文站 · LeetCode 国际站
简要题意: 每小时选择一堆香蕉并以固定速度吃,吃完后该小时不再吃其他堆,求 h 小时内吃完所有香蕉的最小整数速度。
代码*课后作业
2187. 完成旅途的最少时间 / Minimum Time To Complete Trips
LeetCode 中文站 · LeetCode 国际站
简要题意: 每辆公交车完成一趟需要固定时间,可独立连续运行,求所有公交车累计完成 totalTrips 趟所需的最少时间。
代码*课后作业
2861. 最大合金数 / Maximum Number Of Alloys
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定多台机器的金属配方、库存、购买单价和预算,只使用同一台机器生产,求最多能制造的合金数量。
代码*课后作业
2439. 最小化数组中的最大值 / Minimize Maximum Of Array
LeetCode 中文站 · LeetCode 国际站
简要题意: 每次可将下标大于 0 的某个正数减 1,并给它左侧相邻元素加 1,求任意次操作后数组最大值的最小可能值。
代码*课后作业
2517. 礼盒的最大甜蜜度 / Maximum Tastiness Of Candy Basket
LeetCode 中文站 · LeetCode 国际站
简要题意: 从不同糖果种类中选 k 种,甜蜜度为所选价格两两差的绝对值的最小值,求最大甜蜜度。
代码*课后作业
二分查找 - 变形162. 寻找峰值 / Find Peak Element
LeetCode 中文站 · LeetCode 国际站
简要题意: 数组相邻元素不相等,两端外侧视为负无穷,返回任意一个严格大于相邻元素的峰值下标,要求对数时间复杂度。
代码
153. 寻找旋转排序数组中的最小值 / Find Minimum in Rotated Sorted Array
LeetCode 中文站 · LeetCode 国际站
简要题意: 严格递增数组经过旋转,元素互不相同,找出最小值,要求对数时间复杂度。
代码
33. 搜索旋转排序数组 / Search in Rotated Sorted Array
LeetCode 中文站 · LeetCode 国际站
简要题意: 严格递增数组在某个位置旋转后得到 nums。返回 target 在当前数组中的下标;不存在时返回 -1。要求 O(log n) 时间。
代码两种方法
1901. 寻找峰值 II / Find A Peak Element II
LeetCode 中文站 · LeetCode 国际站
简要题意: 二维矩阵中相邻元素不相等,矩阵外视为 -1,找到一个严格大于上、下、左、右相邻元素的位置。
代码*课后作业
154. 寻找旋转排序数组中的最小值 II / Find Minimum in Rotated Sorted Array II
LeetCode 中文站 · LeetCode 国际站
简要题意: 非递减数组经过旋转,元素可能重复,找出数组中的最小值。
代码*课后作业
链表 - 反转系列206. 反转链表 / Reverse Linked List
LeetCode 中文站 · LeetCode 国际站
简要题意: 反转单链表中所有节点的连接方向,返回反转后的头节点;空链表返回空。
代码
92. 反转链表 II / Reverse Linked List II
LeetCode 中文站 · LeetCode 国际站
简要题意: 反转单链表中从第 left 到第 right 个节点的部分,下标从 1 开始,其余节点保持不变。
代码
25. K 个一组翻转链表 / Reverse Nodes in k-Group
LeetCode 中文站 · LeetCode 国际站
简要题意: 每 k 个节点为一组反转链表,最后不足 k 个的部分保持原样,不能只交换节点值。
代码
24. 两两交换链表中的节点 / Swap Nodes in Pairs
LeetCode 中文站 · LeetCode 国际站
简要题意: 两两交换链表中相邻节点,若最后剩一个节点则保持原样,不能只交换节点值。
代码*课后作业
445. 两数相加 II / Add Two Numbers II
LeetCode 中文站 · LeetCode 国际站
简要题意: 两个非负整数按高位在前存入链表,返回它们的和,结果也用高位在前的链表表示。
代码*课后作业
2816. 翻倍以链表形式表示的数字 / Double a Number Represented as a Linked List
LeetCode 中文站 · LeetCode 国际站
简要题意: 非负整数以高位在前的链表表示,将其乘以 2,并用相同形式返回结果。
代码*课后作业
链表 - 快慢指针876. 链表的中间结点 / Middle of the Linked List
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回单链表的中间节点;节点数为偶数时,返回两个中间节点中的后一个。
代码
141. 环形链表 / Linked List Cycle
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断单链表是否存在环,即能否沿 next 指针再次到达之前访问过的节点;要求不修改链表。
代码
142. 环形链表 II / Linked List Cycle II
LeetCode 中文站 · LeetCode 国际站
简要题意: 若链表有环,返回环的入口节点,否则返回空;不能修改链表。
代码
143. 重排链表 / Reorder List
LeetCode 中文站 · LeetCode 国际站
简要题意: 将链表按首节点、尾节点、第二个节点、倒数第二个节点的次序重新连接,要求修改节点连接而非节点值。
代码
链表 - 删除系列237. 删除链表中的节点 / Delete Node in a Linked List
LeetCode 中文站 · LeetCode 国际站
简要题意: 只给出单链表中待删除的节点,且该节点不是尾节点,在无法访问头节点的情况下删除它。
代码脑筋急转弯
19. 删除链表的倒数第 N 个结点 / Remove Nth Node From End of List
LeetCode 中文站 · LeetCode 国际站
简要题意: 删除单链表的倒数第 n 个结点,返回新头节点。n 从 1 开始;保证 n 不超过结点数量。
代码前后指针
83. 删除排序链表中的重复元素 / Remove Duplicates from Sorted List
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定有序链表,删除重复节点,使每个不同的值只保留一个节点。
代码
82. 删除排序链表中的重复元素 II / Remove Duplicates from Sorted List II
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定有序链表,删除所有出现重复值的节点,只保留原本仅出现一次的值。
代码
二叉树与递归 - 深入理解104. 二叉树的最大深度 / Maximum Depth of Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回二叉树从根节点到最远叶节点路径上的节点数;空树深度为 0。
代码两种方法
111. 二叉树的最小深度 / Minimum Depth Of Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 求根节点到最近叶节点路径上的节点数;叶节点没有左右子节点。
代码*课后作业
112. 路径总和 / Path Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断二叉树是否存在从根到叶的路径,使路径节点值之和等于 targetSum。
代码*课后作业
129. 求根节点到叶节点数字之和 / Sum Root To Leaf Numbers
LeetCode 中文站 · LeetCode 国际站
简要题意: 节点值为 0 到 9,每条根到叶路径按顺序组成一个十进制数,求所有这些数的总和。
代码*课后作业
1448. 统计二叉树中好节点的数目 / Count Good Nodes In Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 若从根到某节点的路径上没有比该节点值更大的节点,则该节点为好节点,求好节点总数。
代码*课后作业
987. 二叉树的垂序遍历 / Vertical Order Traversal Of A Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 根坐标为 (0,0),左右子节点分别向下一行并左右移一列;按列、行排序输出节点,同位置再按节点值升序排列。
代码*课后作业
二叉树与递归 - 灵活运用100. 相同的树 / Same Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 两棵二叉树的结构完全相同,且对应结点的值相等时称为相同的树。判断给定的 p、q 是否相同。
代码
101. 对称二叉树 / Symmetric Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断二叉树是否关于根节点左右镜像对称,结构和对应节点值都必须匹配。
代码
110. 平衡二叉树 / Balanced Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断二叉树是否平衡:每个节点的左右子树高度差都不超过 1。
代码
199. 二叉树的右视图 / Binary Tree Right Side View
LeetCode 中文站 · LeetCode 国际站
简要题意: 从右侧观察二叉树,返回从上到下每层最右边可见节点的值。
代码
1026. 节点与其祖先之间的最大差值 / Maximum Difference Between Node And Ancestor
LeetCode 中文站 · LeetCode 国际站
简要题意: 在二叉树中选取一个节点和它的某个祖先,求二者节点值之差的绝对值的最大值。
代码*课后作业
1080. 根到叶路径上的不足节点 / Insufficient Nodes In Root To Leaf Paths
LeetCode 中文站 · LeetCode 国际站
简要题意: 若经过某节点的每条原树根到叶路径的节点值之和都小于 limit,则该节点不足;同时删除所有不足节点,返回剩余树。
代码*课后作业
1110. 删点成林 / Delete Nodes And Return Forest
LeetCode 中文站 · LeetCode 国际站
简要题意: 删除二叉树中值位于给定集合的节点,返回剩余各棵树的根节点。
代码*课后作业
二叉树与递归 - 前序/中序/后序98. 验证二叉搜索树 / Validate Binary Search Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断二叉树是否为严格二叉搜索树:每个结点左子树的所有值都小于它,右子树的所有值都大于它;左右子树也必须满足此条件。不允许重复值。
代码三种方法
938. 二叉搜索树的范围和 / Range Sum of BST
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回二叉搜索树中节点值处于闭区间 [low, high] 的所有节点值之和。
代码*课后作业
2476. 二叉搜索树最近节点查询 / Closest Nodes Queries In A Binary Search Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 对每个查询值,返回二叉搜索树中不大于它的最大值和不小于它的最小值;不存在时对应返回 -1。
代码*课后作业
1373. 二叉搜索子树的最大键值和 / Maximum Sum BST in Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 在二叉树中找出满足严格二叉搜索树条件的子树,返回最大节点值之和;允许选择空树并得到 0。
代码*课后作业
105. 从前序与中序遍历序列构造二叉树 / Construct Binary Tree from Preorder and Inorder Traversal
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定同一棵二叉树的前序和中序遍历,节点值互不相同,重建并返回二叉树。
代码*课后作业
106. 从中序与后序遍历序列构造二叉树 / Construct Binary Tree From Inorder And Postorder Traversal
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定同一棵二叉树的中序和后序遍历,节点值互不相同,重建并返回二叉树。
代码*课后作业
889. 根据前序和后序遍历构造二叉树 / Construct Binary Tree From Preorder And Postorder Traversal
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定节点值互不相同的前序和后序遍历,重建一棵符合两种遍历结果的二叉树;有多个答案时返回任意一个。
代码*课后作业
二叉树与递归 - 最近公共祖先236. 二叉树的最近公共祖先 / Lowest Common Ancestor of a Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定二叉树及其中两个节点,返回同时拥有这两个后代的最深节点;节点可以是自己的后代。
代码
235. 二叉搜索树的最近公共祖先 / Lowest Common Ancestor of a Binary Search Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定二叉搜索树及其中两个节点,返回同时拥有这两个后代的最深节点;节点可以是自己的后代。
代码
1123. 最深叶节点的最近公共祖先 / Lowest Common Ancestor Of Deepest Leaves
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回二叉树中所有最深叶节点的最近公共祖先。
代码*课后作业
二叉树 - BFS102. 二叉树的层序遍历 / Binary Tree Level Order Traversal
LeetCode 中文站 · LeetCode 国际站
简要题意: 按从上到下的层次遍历二叉树,每层从左到右。返回二维数组,每个子数组保存一层结点值。空树返回空数组。
代码两种写法
103. 二叉树的锯齿形层序遍历 / Binary Tree Zigzag Level Order Traversal
LeetCode 中文站 · LeetCode 国际站
简要题意: 逐层遍历二叉树,第一层从左到右,之后每层交替方向,返回各层节点值。
代码两种写法
513. 找树左下角的值 / Find Bottom Left Tree Value
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回二叉树最深一层最左侧节点的值。
代码
107. 二叉树的层序遍历 II / Binary Tree Level Order Traversal II
LeetCode 中文站 · LeetCode 国际站
简要题意: 按从底层到顶层的顺序返回二叉树各层节点值,每层内部从左到右排列。
代码*课后作业
116. 填充每个节点的下一个右侧节点指针 / Populating Next Right Pointers In Each Node
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定完美二叉树,将每个节点的 next 指向同层右侧相邻节点;该层末尾指向空。
代码*课后作业
117. 填充每个节点的下一个右侧节点指针 II / Populating Next Right Pointers In Each Node II
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定任意二叉树,将每个节点的 next 指向同层右侧相邻节点;该层末尾指向空。
代码*课后作业
2415. 反转二叉树的奇数层 / Reverse Odd Levels Of Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定完美二叉树,将所有奇数层的节点值分别反转,根节点为第 0 层,树的连接结构不变。
代码*课后作业
2641. 二叉树的堂兄弟节点 II / Cousins In Binary Tree II
LeetCode 中文站 · LeetCode 国际站
简要题意: 将每个节点的值替换为同层中与它父节点不同的所有节点的原值之和,返回修改后的树。
代码*课后作业
回溯 - 子集型17. 电话号码的字母组合 / Letter Combinations Of A Phone Number
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定由 2 到 9 组成的数字串,按电话键盘映射返回所有可能的字母组合。
代码引入回溯概念用
78. 子集 / Subsets
LeetCode 中文站 · LeetCode 国际站
简要题意: nums 中元素互不相同,返回它的所有子集,包含空集和全集。子集顺序及子集内元素顺序不限。
代码两种写法
131. 分割回文串 / Palindrome Partitioning
LeetCode 中文站 · LeetCode 国际站
简要题意: 将字符串切分为若干非空回文子串,返回所有切分方案。
代码两种写法
回溯 - 组合型与剪枝77. 组合 / Combinations
LeetCode 中文站 · LeetCode 国际站
简要题意: 从整数 1 到 n 中选择 k 个不同数字,返回所有组合。组合与组合内顺序不限,不允许重复组合。
代码两种写法
216. 组合总和 III / Combination Sum III
LeetCode 中文站 · LeetCode 国际站
简要题意: 从 1 到 9 中选出 k 个互不相同的数,使其和为 n,返回全部组合。
代码两种写法
22. 括号生成 / Generate Parentheses
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定括号对数 n,生成由 n 对括号组成的所有合法括号字符串。
代码两种写法
39. 组合总和 / Combination Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 从互不相同的正整数 candidates 中选择若干数,使和等于 target。每个候选数可重复使用。返回所有不同的数值组合,顺序不限。
代码*课后作业
回溯 - 排列型46. 全排列 / Permutations
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定元素互不相同的 nums,返回所有排列。结果数组的顺序不限,但每个排列内部的顺序代表一个不同答案。
代码精确计算搜索树的节点个数
51. N 皇后 / N-Queens
LeetCode 中文站 · LeetCode 国际站
简要题意: 在 n×n 棋盘上放置 n 个皇后,使任意两个不同行、不同列且不在同一斜线上,返回全部棋盘方案。
代码
52. N 皇后 II / N-Queens II
LeetCode 中文站 · LeetCode 国际站
简要题意: 在 n×n 棋盘上放置 n 个互不攻击的皇后,返回不同方案的数量。
代码
2850. 将石头分散到网格图的最少移动次数 / Minimum Moves To Spread Stones Over Grid
LeetCode 中文站 · LeetCode 国际站
简要题意: 3×3 网格中共有 9 块石头,每次将一块石头移到上下左右相邻格,求每格恰有一块石头的最少移动次数。
代码*课后作业
动态规划 - 从记忆化搜索到递推198. 打家劫舍 / House Robber
LeetCode 中文站 · LeetCode 国际站
简要题意: 房屋沿直线排列,第 i 间存有 nums[i] 金额。不能同时选择相邻房屋,返回可获得的最大金额。可以不选择任何房屋。
代码包含空间优化
70. 爬楼梯 / Climbing Stairs
LeetCode 中文站 · LeetCode 国际站
简要题意: 到达 n 级楼梯顶部,每次可以上 1 级或 2 级。返回不同步长序列的数量。
代码*课后作业
746. 使用最小花费爬楼梯 / Min Cost Climbing Stairs
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定每级台阶的花费,支付后可向上走一或两级,可从第 0 或第 1 级开始,求到达楼顶的最小花费。
代码*课后作业
377. 组合总和 Ⅳ / Combination Sum IV
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定互不相同的正整数和目标值,每个数可重复使用,求总和等于目标值的有序序列数;不同顺序分别计数。
代码*课后作业
2466. 统计构造好字符串的方案数 / Count Ways To Build Good Strings
LeetCode 中文站 · LeetCode 国际站
简要题意: 从空串开始,每次追加 zero 个 0 或 one 个 1,统计长度位于 [low, high] 的不同字符串数,答案对 1000000007 取模。
代码*课后作业
213. 打家劫舍 II / House Robber II
LeetCode 中文站 · LeetCode 国际站
简要题意: 房屋围成一圈,相邻房屋不能同时偷窃,求可偷取的最大金额。
代码*课后作业
0-1 背包 完全背包 至多/恰好/至少494. 目标和 / Target Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 在每个 nums[i] 前独立选择 + 或 -,将所有带符号的数相加。返回结果等于 target 的符号选择数量。+0 和 -0 是两种不同选择。
代码包含空间优化
322. 零钱兑换 / Coin Change
LeetCode 中文站 · LeetCode 国际站
简要题意: 每种硬币有无限枚,求恰好凑出 amount 的最少硬币数。不可能时返回 -1,amount=0 时返回 0。
代码包含空间优化
2915. 和为目标值的最长子序列的长度 / Length Of The Longest Subsequence That Sums To Target
LeetCode 中文站 · LeetCode 国际站
简要题意: 从数组中按原顺序选取元素,使总和为 target,返回最长子序列长度;不存在时返回 -1。
代码*课后作业
416. 分割等和子集 / Partition Equal Subset Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 判断能否把 nums 的全部元素分成两个互不重叠的子集,使两个子集的元素和相等。每个位置的元素只可使用一次。
代码*课后作业
518. 零钱兑换 II / Coin Change II
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定硬币面额和总金额,每种硬币可使用任意次,求凑出该金额的组合数;不同排列算同一组合。
代码*课后作业
最长公共子序列 LCS1143. 最长公共子序列 / Longest Common Subsequence
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回两个字符串的最长公共子序列长度。子序列保持相对顺序但不要求连续,没有公共字符时返回 0。
代码包含空间优化
72. 编辑距离 / Edit Distance
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定两个字符串,每次可插入、删除或替换一个字符,求将第一个字符串变成第二个的最少操作数。
代码包含空间优化
最长递增子序列 LIS300. 最长递增子序列 / Longest Increasing Subsequence
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回 nums 的最长严格递增子序列长度。子序列可以删除元素,但保留剩余元素的相对顺序,不要求连续。
代码包括贪心二分 + 𝑂(1) 空间
1671. 得到山形数组的最少删除次数 / Minimum Number Of Removals To Make Mountain Array
LeetCode 中文站 · LeetCode 国际站
简要题意: 删除尽量少的元素,使剩余序列先严格递增后严格递减,且峰顶两侧都非空,返回最少删除数量。
代码*课后作业
1626. 无矛盾的最佳球队 / Best Team With No Conflicts
LeetCode 中文站 · LeetCode 国际站
简要题意: 按年龄和得分选择球队,使年轻球员的得分不高于年长球员;同龄球员之间没有冲突,求最大总得分。
代码*课后作业
状态机 DP - 买卖股票系列122. 买卖股票的最佳时机 II / Best Time to Buy and Sell Stock II
LeetCode 中文站 · LeetCode 国际站
简要题意: prices[i] 为第 i 天股价。可完成多次买入卖出,但任意时刻最多持有一股。可在同一天先卖再买。返回最大总利润,不交易时利润为 0。
代码
309. 买卖股票的最佳时机含冷冻期 / Best Time to Buy and Sell Stock with Cooldown
LeetCode 中文站 · LeetCode 国际站
简要题意: 可以多次买卖股票且最多持有一股。卖出后的下一天是冷冻期,不能买入;再下一天可以。返回最大利润。
代码
188. 买卖股票的最佳时机 IV / Best Time to Buy and Sell Stock IV
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定每日股价和交易上限 k,最多完成 k 次交易,同一时间只能持有一股,求最大利润。
代码变形:恰好/至少
714. 买卖股票的最佳时机含手续费 / Best Time to Buy and Sell Stock with Transaction Fee
LeetCode 中文站 · LeetCode 国际站
简要题意: 可多次买卖股票,同一时间只能持有一股,每笔完整交易支付一次手续费,求最大利润。
代码*课后作业
区间 DP516. 最长回文子序列 / Longest Palindromic Subsequence
LeetCode 中文站 · LeetCode 国际站
简要题意: 返回 s 中最长回文子序列的长度。可以删除若干字符但须保留相对顺序;不要求连续。
代码包含空间优化
1039. 多边形三角剖分的最低得分 / Minimum Score Triangulation Of Polygon
LeetCode 中文站 · LeetCode 国际站
简要题意: 将凸多边形剖分为三角形,每个三角形得分为三个顶点值之积,求所有三角形总得分的最小值。
代码
1771. 由子序列构造的最长回文串的长度 / Maximize Palindrome Length From Subsequences
LeetCode 中文站 · LeetCode 国际站
简要题意: 分别从两个字符串中各选一个非空子序列并依次拼接,求可构成的最长回文串长度;无法构成时返回 0。
代码*课后作业
1000. 合并石头的最低成本 / Minimum Cost To Merge Stones
LeetCode 中文站 · LeetCode 国际站
简要题意: 石堆排成一行,每次合并连续 k 堆,费用为这些堆的石子总数,求合成一堆的最小费用;无法完成则返回 -1。
代码*课后作业
树形 DP - 直径系列543. 二叉树的直径 / Diameter of Binary Tree
LeetCode 中文站 · LeetCode 国际站
简要题意: 二叉树中任意两个结点间最长路径所含的边数称为直径。路径可以不经过根结点。单个结点的直径为 0。
代码
124. 二叉树中的最大路径和 / Binary Tree Maximum Path Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 路径由一个或多个不同结点组成,相邻结点之间必须有边。路径可从任意结点开始和结束,且不能重复经过结点。返回非空路径的最大结点值之和。
代码
2246. 相邻字符不同的最长路径 / Longest Path With Different Adjacent Characters
LeetCode 中文站 · LeetCode 国际站
简要题意: 树上每个节点带一个字符,找到相邻节点字符均不同的最长简单路径,返回路径节点数。
代码
687. 最长同值路径 / Longest Univalue Path
LeetCode 中文站 · LeetCode 国际站
简要题意: 在二叉树中寻找所有节点值相同的最长路径,路径不必经过根节点,返回边数。
代码*课后作业
1617. 统计子树中城市之间最大距离 / Count Subtrees With Max Distance Between Cities
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定一棵树,对每个可能的直径 d,统计所选节点构成连通子树且直径为 d 的方案数。
代码*课后作业
2538. 最大价值和与最小价值和的差值 / Difference Between Maximum And Minimum Price Sum
LeetCode 中文站 · LeetCode 国际站
简要题意: 树上每个节点有正价格;选择一个根,将从根出发的所有路径的最大价格和减去最小价格和,求所有选根方式中的最大差值。
代码*课后作业
树形 DP - 最大独立集337. 打家劫舍 III / House Robber III
LeetCode 中文站 · LeetCode 国际站
简要题意: 房屋组成一棵二叉树,每个结点值为金额。不能同时选择由一条边直接连接的两间房屋。返回可获得的最大金额。
代码
1377. T 秒后青蛙的位置 / Frog Position After T Seconds
LeetCode 中文站 · LeetCode 国际站
简要题意: 青蛙从树的节点 1 出发,每秒等概率跳向一个未访问的相邻节点;无处可跳则停留,求 t 秒后位于 target 的概率。
代码*课后作业
2646. 最小化旅行的价格总和 / Minimize The Total Price Of The Trips
LeetCode 中文站 · LeetCode 国际站
简要题意: 树上给定节点价格及多次行程,可预先将一组互不相邻节点的价格减半,求所有行程经过节点的最小总费用。
代码*课后作业
树形 DP - 最小支配集968. 监控二叉树 / Binary Tree Cameras
LeetCode 中文站 · LeetCode 国际站
简要题意: 在二叉树节点上安装摄像头,每个摄像头覆盖自身、父节点和直接子节点,求覆盖整棵树的最少摄像头数。
代码
单调栈739. 每日温度 / Daily Temperatures
LeetCode 中文站 · LeetCode 国际站
简要题意: 对每天的温度,计算至少还要等多少天才能遇到严格更高的温度。之后没有更高温度则记为 0。
代码两种写法
42. 接雨水 / Trapping Rain Water
LeetCode 中文站 · LeetCode 国际站
简要题意: 给定宽度均为 1 的非负柱高数组,计算下雨后柱子之间能储存的总水量。
代码
901. 股票价格跨度 / Online Stock Span
LeetCode 中文站 · LeetCode 国际站
简要题意: 逐日输入股价,返回截至当天连续多少天的价格都不高于当天价格,天数包含当天。
代码*课后作业
1019. 链表中的下一个更大节点 / Next Greater Node In Linked List
LeetCode 中文站 · LeetCode 国际站
简要题意: 对链表中的每个节点,找到其右侧第一个值严格更大的节点,返回对应值数组;不存在时填 0。
代码*课后作业
1944. 队列中可以看到的人数 / Number Of Visible People In A Queue
LeetCode 中文站 · LeetCode 国际站
简要题意: 队伍中身高各不相同;若两人之间所有人的身高都低于这两人中的较矮者,则彼此可见,求每个人向右能看到的人数。
代码*课后作业
84. 柱状图中最大的矩形 / Largest Rectangle In Histogram
LeetCode 中文站 · LeetCode 国际站
简要题意: 每根柱子的宽度为 1,高度由 heights 给出。求完全位于柱状图内部、边与坐标轴平行的矩形的最大面积。
代码*课后作业
1793. 好子数组的最大分数 / Maximum Score Of A Good Subarray
LeetCode 中文站 · LeetCode 国际站
简要题意: 选取包含给定下标 k 的连续子数组,得分为子数组最小值乘以长度,求最大得分。
代码*课后作业
单调队列239. 滑动窗口最大值 / Sliding Window Maximum
LeetCode 中文站 · LeetCode 国际站
简要题意: 长度为 k 的窗口从 nums 左端逐格移向右端。按顺序返回每个窗口内的最大值。
代码
2398. 预算内的最多机器人数目 / Maximum Number Of Robots Within Budget
LeetCode 中文站 · LeetCode 国际站
简要题意: 选择连续的一组机器人,总费用为最大启动成本加上机器人数乘以运行成本之和,求预算内最多可选多少个。
代码*课后作业
862. 和至少为 K 的最短子数组 / Shortest Subarray With Sum At Least K
LeetCode 中文站 · LeetCode 国际站
简要题意: 整数数组可以含负数,求元素和至少为 k 的最短非空连续子数组长度;不存在则返回 -1。
代码*课后作业
1499. 满足不等式的最大值 / Max Value Of Equation
LeetCode 中文站 · LeetCode 国际站
简要题意: 点按横坐标递增排列,选取横坐标距离不超过 k 的两个点,求 yi + yj + 横坐标距离 的最大值。
代码*课后作业
1696. 跳跃游戏 VI / Jump Game VI
LeetCode 中文站 · LeetCode 国际站
简要题意: 从数组下标 0 出发,每次向右跳 1 到 k 步,到达最后一个位置;得分为经过位置的元素和,求最大得分。
代码*课后作业
2944. 购买水果需要的最少金币数 / Minimum Number Of Coins For Fruits
LeetCode 中文站 · LeetCode 国际站
简要题意: 购买第 i 个水果后可免费获得随后 i 个水果,下标从 1 开始;免费水果也可选择购买以触发优惠,求获得全部水果的最少金币。
代码*课后作业
  1. 双指针 5
    1. 相向双指针 1 👌
    2. 相向双指针 2 👌
    3. 同向双指针 滑动窗口 👌
    4. 二分查找 👌
    5. 二分查找 - 变形 👌
  2. 链表 3
    1. 链表 - 反转系列 👌
    2. 链表 - 快慢指针 👌
    3. 链表 - 删除系列 👌
  3. 二叉树 5 👌
    1. 二叉树与递归 - 深入理解
    2. 二叉树与递归 - 灵活运用
    3. 二叉树与递归 - 前序/中序/后序
    4. 二叉树与递归 - 最近公共祖先
    5. 二叉树 - BFS
  4. 回溯 3 👌
    1. 回溯 - 子集型
    2. 回溯 - 组合型与剪枝
    3. 回溯 - 排列型
  5. 动态规划 9
    1. 动态规划 - 从记忆化搜索到递推 👌
    2. 0-1 背包 完全背包 至多/恰好/至少 👌
    3. 最长公共子序列 LCS 👌
    4. 最长递增子序列 LIS 👌
    5. 状态机 DP
    6. 区间 DP
    7. 树形 DP - 直径系列
    8. 树形 DP - 最大独立集
    9. 树形 DP - 最小支配集
  6. 单调栈 👌
  7. 单调队列

分类题单​

灵茶山艾府·高质量题解精选​

https://github.com/EndlessCheng/codeforces-go/blob/master/leetcode/SOLUTIONS.md

  1. 哈希表
  2. 链表
  3. 双向链表
  4. 二叉树
  5. 滑动窗口 题单
  6. 二分
  7. 技术性枚举
  8. 前后缀分解
  9. 前缀和
  10. 前缀和与哈希表
  11. 差分数组
  12. 单调栈
  13. 单调队列
  14. 有限队列栈
  15. 位运算
  16. 贡献法
  17. 动态规划 题单
  18. 数学
  19. 贪心
  20. 构造
  21. 思维题
  22. 树
  23. 最短路

题单

image-20240505220528468

”前缀和“很重要

image-20240505220501993

测试及对拍​