解题思路 · 决策树
读完题不知道用什么方法?回答几个是或否。
先看输入长什么样,再看题目问什么。几个回答之后,你会落到灵神题单精选 35 个专题中的一站:为什么是它、去哪刷题、读哪篇教程。这只是第一猜测,不是定理,有些题要组合两种方法。
第 1 问
题目要你实现一个类,它的几个方法会被反复调用吗?
如 LRU 缓存、最小栈、迭代器
查看全部 39 个问题
Q01 题目要你实现一个类,它的几个方法会被反复调用吗?
如 LRU 缓存、最小栈、迭代器
Q02 要按 key 或按时间戳快速查询,或者维护一个不断流入的数据流(缓存、快照、中位数、第 k 大)?
如 LRU 缓存、O(1) 时间插入删除和随机取值、基于时间的键值存储、数据流的中位数
Q03 操作围绕字符串前缀或文件路径,或者要把一个结构编码成字符串再还原?
如前缀树、内存文件系统、序列化二叉树
- 是
- 否
Q04 输入描述的是“谁和谁相连”吗:树、图、网格,或者 A 依赖 B?
给了 root、边列表、邻接表,或一个二维字符矩阵
Q05 是一棵二叉树吗(给了 root,每个节点最多两个孩子)?
节点类型是 TreeNode
Q06 是二叉搜索树,并且可以利用“左小右大”的顺序?
如二叉搜索树中第 K 小的元素、验证二叉搜索树
Q07 要根据遍历序列把树建出来,或者把树改造成另一种形状?
如从前序与中序遍历序列构造二叉树、二叉树展开为链表
- 是
Q08 答案和路径有关吗:根到叶、路径和、两个节点的最近公共祖先、任意两点之间的最大路径?
如路径总和 III、二叉树中的最大路径和
- 是
Q09 每个节点都要决定选或不选,而且父子之间互相限制?
如打家劫舍 III
- 是
- 否
Q10 要在棋盘或字符矩阵上试着填数、放子或走一条路,走不通就撤回重来?
如单词搜索、单词搜索 II、解数独
- 是
第 21 站:剪枝搜索
DFS 前先标记当前格子,这条路失败就恢复原状,再试下一个方向或数字;用集合或位掩码记下每行、每列、每宫已用的数字,尽早剪枝。
Q11 是二维网格,每个格子只和上下左右相邻?
如岛屿数量、腐烂的橘子、不同路径
Q12 每个格子的答案只取决于它上方和左方的格子(比如只能向右或向下走)?
如不同路径、最小路径和、最大正方形
- 是
- 否
Q13 边表示先后依赖,要排出一个合法顺序,或者判断依赖里有没有环?
如课程表、火星词典
- 是
Q14 要求从起点到终点的最少步数或最小代价?
如单词接龙、网络延迟时间、K 站中转内最便宜的航班
- 是
第 17 站:最短路
边权都一样用 BFS,非负权用 Dijkstra;状态可以是“位置 + 额外信息”,比如还剩几次中转。
Q15 要挑一些边把所有点连起来,并让总代价最小?
如连接所有点的最小费用
- 是
Q16 输入是链表吗?
如反转链表、环形链表、删除链表的倒数第 N 个结点
Q17 要列出所有满足条件的方案(子集、排列、组合),而不只是数一数有几个?
如子集、全排列、组合总和;三数之和这类只挑两三个数凑目标和的题答否
Q18 是把一个字符串切成几段,或者拼出合法的字符串?
如括号生成、分割回文串、复原 IP 地址
- 是
Q19 约束很多,必须边搜边剪枝,比如在棋盘上摆棋子、用四张牌凑出 24?
如 N 皇后、N 皇后 II、24 点游戏
- 是
- 否
Q20 输入是一组区间 [开始, 结束]?
如合并区间、插入区间、无重叠区间、用最少数量的箭引爆气球
- 是
Q21 数组已经有序,或者答案具有单调性(x 可行,那么比 x 大的也都可行)?
如两数之和 II、三数之和(先排序)、搜索旋转排序数组、爱吃香蕉的珂珂
Q22 要在有序数组里找两三个数凑出目标和,或者从两端往中间收?
如两数之和 II、三数之和、有序数组的平方
- 是
- 否
Q23 问的是连续的子数组或子串?
如无重复字符的最长子串、和为 K 的子数组、乘积最大子数组
Q24 要找回文子串:最长的那个,或者一共有几个?
如最长回文子串、回文子串
Q25 要的是一段连续元素的最大和或最大乘积,元素有正有负?
如乘积最大子数组、环形子数组的最大和、删除一次得到子数组最大和
- 是
第 28 站:状态机
只看“以 i 结尾的最好结果”,它只依赖 i−1;求乘积时要同时记最大和最小,因为负负得正。最基础的最大子数组和在第 01 站。
Q26 元素可能是负数,或者要统计和恰好等于 k 的子数组有几个?
如和为 K 的子数组、连续数组
- 是
- 否
Q27 要第 k 大、前 k 个,或者每个元素右边第一个更大(更小)的数?
如数组中的第 K 个最大元素、每日温度、柱状图中最大的矩形
Q28 要处理嵌套或成对的结构(括号、表达式、编码字符串),或者总是先处理最近放进去的那个?
如有效的括号、字符串解码、基本计算器、小行星碰撞
Q29 求最大值、最小值或方案数,并且前面的选择会影响后面还能怎么选?
如爬楼梯、打家劫舍、零钱兑换、跳跃游戏
Q30 要比较两个字符串(或两个序列):匹配、编辑,或者找公共部分?
如最长公共子序列、编辑距离、交错字符串
- 是
第 26 站:字符串动规
dp[i][j] 表示 s 的前 i 个字符和 t 的前 j 个字符的答案,按末尾字符相等或不等分别转移。
Q31 和回文有关,或者答案要通过合并、拆分区间 [i, j] 得到?
如最长回文子序列、戳气球
Q32 从一堆物品或数字里挑一些,凑出某个和或容量,问能不能凑、最少几个、有多少种?
如零钱兑换、分割等和子集、目标和
- 是
Q33 每一天只可能处于少数几种状态之一,比如持有或不持有股票、冷冻期?
如买卖股票的最佳时机系列
- 是
Q34 可以跳着选元素,只要选出来的保持某种先后或大小关系(最长递增子序列一类)?
如最长递增子序列、俄罗斯套娃信封问题
- 是
第 25 站:子序列
dp[i] 表示以第 i 个元素结尾的最好结果,从前面所有能接上的 j 转移;O(n log n) 的写法用贪心加二分。
Q35 要把数组切成若干段,或者在时间轴上安排互不冲突的任务?
如最低票价、规划兼职工作、分隔数组以得到最大和
- 是
Q36 能说清楚为什么每一步都选当前最好的,最后不会吃亏?
如跳跃游戏、加油站、分发糖果
- 否
Q37 要找满足某种关系的一对元素,或者按某个特征分组、计数?
如两数之和、字母异位词分组、最长连续序列
Q38 和二进制位、异或、只出现一次的数字,或者整数溢出边界有关?
如只出现一次的数字、位 1 的个数、x 的平方根
- 是
Q39 主要工作是按规则解析或匹配一个字符串?
如字符串转换整数、反转字符串中的单词、找出字符串中第一个匹配项的下标
- 是
- 否