普通数组做这两件事各要多久?
算法进阶 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
这个"跳"用了什么运算?
管理 8 个数的线段树有几层?
合并的方式由什么决定?
为什么"完全在区间内"可以直接返回?
单点修改要更新几个节点?
求区间最大值该用哪个?
怎么判断该不该上高级结构?
默写并查集的两个核心函数。
画一张这一批的知识地图。
参考答案(家长):位运算,取二进制最低位的 1。
参考答案(家长):修改快查询慢,或用前缀和则查询快修改慢。
参考答案(家长):由要维护的信息决定,求和就相加,求最大就取较大。
参考答案(家长):4 层(根管 8 个,往下 4、2、1)。
参考答案(家长):从叶子到根这条链上的所有节点,约 log n 个。
参考答案(家长):这个节点的值已经是这段的答案了,不用再往下拆。
参考答案(家长):先估算朴素做法的复杂度,超时了再考虑。
参考答案(家长):线段树,树状数组不擅长区间最值。
参考答案(家长):画完能看出哪一块还虚,那就是要补的。
参考答案(家长):find 带路径压缩,union 合并两个祖先。
用一句话概括 DP 和搜索的区别。
为什么无后效性是前提?
最短路满足最优子结构吗?
背包问题需要哪几个信息?
最长上升子序列该用哪种?
体会这个差别。
这样是什么复杂度?
这个数组一定是递增的吗?
状态该怎么定?
三种转移各对应什么?
参考答案(家长):否则存下来的答案会被后面推翻,就不能复用了。
参考答案(家长):搜索每次重新算,DP 把算过的记下来。
参考答案(家长):考虑到第几件物品、剩余容量多少。
参考答案(家长):满足,最短路的任意一段也是最短路。
参考答案(家长):状态要包含足够信息才能推出下一步。
参考答案(家长):以第 i 个结尾的最长长度。
参考答案(家长):一定是,长度越长结尾必然越大。
参考答案(家长):平方级,因为每个位置都要看前面所有位置。
参考答案(家长):删一个、加一个、改一个,各自从对应的子状态加一。
参考答案(家长):第一个串前 i 个和第二个串前 j 个的最长公共长度。
这四种的核心差别在哪?
默写一维 01 背包。
两种背包的代码差几个字?
这样拆的问题是什么?
把 10 个拆成几组?
为什么容量要在组内物品的外层?
凑出金额 n 的方案数怎么写?
能否凑出金额 n,转移怎么写?
这和最短路记录路径是不是一个思路?
什么样的题适合区间 DP?
参考答案(家长):外层枚举物品,内层容量从大到小。
参考答案(家长):同一件物品能用几次,以及有没有分组限制。
参考答案(家长):数量大时拆出来的件数太多,会超时。
参考答案(家长):只差循环方向。
参考答案(家长):保证同一组内只选一件。
参考答案(家长):1、2、4、3 共四组。
参考答案(家长):当前可行 或 减去这件后可行。
参考答案(家长):把每种面额的方案数累加。
参考答案(家长):合并石子、矩阵连乘、回文划分这类"合并/划分区间"的题。
参考答案(家长):完全一样,都是记前驱再倒推。