m["banana"] 在从未赋值时取出的值是多少?
算法进阶 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
序列 2 2 3 处理后,cnt[2] 和 cnt[3] 各是多少?
判断两个元素是否在同一组,靠比较它们的什么?
如果 fa[x]==x,说明 x 是什么?
合并两个本来就在同一组的元素会发生什么?
路径压缩优化的是并查集的哪个操作?
互相为好友的关系,更适合用有向图还是无向图?
一条无向边 u—v 要往邻接表里加几次?
n=1000 个点,邻接矩阵大约要多少个格子?
BFS 是先访问离起点近的还是远的点?
参考答案(家长):cnt[2]=2,cnt[3]=1。
参考答案(家长):0(int 默认初始化为 0)。
参考答案(家长):它是自己这组的代表(根)。
参考答案(家长):各自的代表(根)是否相同。
参考答案(家长):find(以及依赖它的合并),让后续查找更快。
参考答案(家长):根相同,fa[根]=根,等于没变化(安全)。
参考答案(家长):两次(g[u] 加 v,g[v] 加 u)。
参考答案(家长):无向图(关系是双向的)。
参考答案(家长):先近后远(按层扩散)。
参考答案(家长):约 100 万个(1000×1000)。
为什么第一次到达某点就是最短步数?
DFS 走到死路后会怎么做?
vis[] 数组在 DFS 里起什么作用?
能做拓扑排序的图必须满足什么条件?
边权都相等时,求最短路可以直接用什么?
Dijkstra 每一步选择哪个点来“确定”?
图里有负权边时还能直接用 Dijkstra 吗?
n 个点的生成树恰好有几条边?
3 个不同数字一共有几种排列?
两个皇后在同一条斜线上,它们的行差和列差有什么关系?
参考答案(家长):退回上一个岔路口,尝试别的方向。
参考答案(家长):BFS 按距离从小到大扩散,先到的一定最近。
参考答案(家长):有向且无环(有环就排不出先后)。
参考答案(家长):标记已访问,避免重复访问导致死循环。
参考答案(家长):当前距离最小且尚未确定的点。
参考答案(家长):BFS(按层扩散即最短步数)。
参考答案(家长):n-1 条。
参考答案(家长):不能,需要换能处理负权的最短路算法。
参考答案(家长):行差的绝对值等于列差的绝对值。
参考答案(家长):6 种(3×2×1)。
正确的剪枝会不会漏掉真正的答案?
分治的三个步骤分别叫什么?
合并两个各含 3 个数的有序段,最多比较几次?
一次划分后,基准这个元素的位置还会再变吗?
二分答案的关键前提是什么?
(7-9)%5 直接算可能是负数,正确写法算出来等于几?
算 2^10 用快速幂大约要几轮乘法(数量级)?
C(4,2) 等于多少?
需要“自动去重并保持有序”,该用哪个容器?
给“求带权图单源最短路”和“列出所有排列”各选一个最合适的算法。
参考答案(家长):分、治、合(拆分、递归解决、合并)。
参考答案(家长):不会,它只砍掉不可能的分支。
参考答案(家长):不会,它已在最终正确位置上了。
参考答案(家长):最多 5 次(每次比较至少定下一个数,共 6 个数)。
参考答案(家长):((7-9)%5+5)%5=(-2+5)%5=3。
参考答案(家长):答案具有单调性(可行的取值连成一段)。
参考答案(家长):6。
参考答案(家长):约 log₂10≈4 轮,远少于 10 次。
参考答案(家长):最短路用 Dijkstra;列出所有排列用回溯(DFS)。
参考答案(家长):set(自动排序且不含重复元素)。