按答题模式分类
动态规划
- 120 Triangle
- 6题买卖股票题团灭
- 剑指offer63 股票的最大利润 比较普通
- 数组dp系列,供阅读
- 最长公共子序列
- 最长上升子序列LIS. 进阶: 354. 俄罗斯套娃信封问题
- 最长公共子串
- 编辑距离
- 152. 乘积最大子数组 主要是由于数组有正数和负数,所以要理解最优子结构不一定只取决于上一个元素的子问题。
- 131. 分割回文串 回溯 + 动态规划预处理难。难点在于划分的时间复杂度计算,详见证明
- 132. 分割回文串 II 有三个特点加速计算。缓存回文判断,带缓存的dp,记录本行dp最小值。
- 32. 最长有效括号 难点在于第二个if块合理性的的推理证明。
- 背包系列:
- 背包总结 链接已失效
- 518. 零钱兑换 II
数组
可能的做法有以下:
分治、前缀和+map、贪心、dp、滑动窗口,单调栈,双指针,还有奇葩的是用链表做。
- 126. 单词接龙 II
- 209. 长度最小的子数组
- 组合总和系列
- 回溯算法:组合问题再剪剪枝 讲解了横向剪枝, 看完后可以理解下一条
- 216. 组合总和 III:【回溯法模板题】
- 216. 组合总和 III 我的答案
- 229. 求众数 II 3个不同数一组消除, 找代表数
- 287. 寻找重复数 找环入口
- 41. 缺失的第一个正数 放置归位
- 76. 最小覆盖子串 维护左闭右开的滑动窗口, 以及触碰字符需求数下限时, 更新满足字符数.
- 31. 下一个排列 背下方法就很简单。证明了一下方法的正确性
- 739. 每日温度 递减栈,比较容易。
- 349. Intersection of Two Arrays easy. 两个数组排序下即可,注意下利用continue检查重复条件的做法leetcode参考答案
- 134 加油站
字符串
- 43. 字符串相乘 两数相乘视为两个多项式相乘
- 剑指 Offer 45. 把数组排成最小的数 和 解释2 证明最优解任意两数间的顺序性. 先根据最优解特性, 证明相邻两数间的顺序性。再用反证法, 推导传递性.
- 如果相邻两数a+b < b+a,则为了得到最小数,a应当排在b左侧,即a < b。因为如果排在右侧,得到ba,那么将其颠倒为ab,可以得到更小的数。
- 如果有相邻3个数a、b、c,其中a < b, b < c(此处<号代表自定义的比较),那么有a < c,即排列为abc。因为如果不是,排列就是cba,有cba<bca<bac<abc,相继颠倒相邻两个数进行换位,从而一路得到更小的数。
- 同理可解决179. 最大数 , 用自定义
__lt__
实现, 注意边界条件即可
树/堆
其它
- 468. 验证IP地址
- 剑指62 约瑟夫环 分为两步,首先从简单入手,以i个人到i-1个人的情况作讨论,并假设m<i,从而得出i-1到i的递推公式。然后把m>=i时的情况归约到m<i。
- 836. 矩形重叠 记住一句话口诀,一个矩形的左下角,在另一个矩形的右上角的左下方。如果要证明,可以证明它的逆否命题。
- 260. 只出现一次的数字 III
num&-num
可以取数字最右侧的1。int digit = xor == Integer.MIN_VALUE ? 1 : xor & (-xor);
。这个位可以将所有数字分为两组,然后让所有数字分在两组作异或。
按主题分类
括号类问题:
20. 有效的括号
22. 括号生成
32. 最长有效括号
301. 删除无效的括号
678. 有效的括号字符串
推荐看宫水三叶题解。https://leetcode.cn/problems/valid-parenthesis-string/solution/you-xiao-de-gua-hao-zi-fu-chuan-by-leetc-osi3/ 。