1.简单
哪种操作在数组中很慢,但在链表头部却很快?
- A访问第 5 个元素
- B求定长数组的长度
- C在开头插入元素
- D通过索引读取最后一个元素
2.简单
在图的邻接表表示中,每个顶点存储什么?
- A到其他每个顶点的最短路径
- B一行 V 个布尔值
- C图中边的总数
- D其相邻顶点的列表
3.简单
二叉树的后序遍历按什么顺序访问节点?
- A先右子树,再节点,最后左子树
- B先左子树,再节点,最后右子树
- C先左子树,再右子树,最后节点
- D先节点,再左子树,最后右子树
4.中等
在使用开放寻址法的哈希表中,可能的最大负载因子是多少?
- A1
- B没有最大值
- C2
- D0.5
5.中等
用两个栈实现一个队列:入队时压入 "in" 栈,出队时从 "out" 栈弹出,"out" 栈为空时从 "in" 栈重新填充。每次操作的均摊代价是多少?
- AO(n)
- BO(log n)
- CO(1)
- DO(n²)
6.中等
在从下标 0 开始存储于数组中的二叉堆里,下标为 i 的节点的父节点在哪里?
- A下标 ⌊(i − 1) / 2⌋
- B下标 i − 1
- C下标 ⌊i / 2⌋ + 1
- D下标 2i + 1
7.困难
采用按秩合并(union by rank)和路径压缩(path compression)的并查集(union-find,不相交集合),每次操作的均摊代价为:
- AO(n)
- BO(n²)
- C恰好 O(log n)
- DO(α(n)),即反阿克曼函数,实际上可视为常数
8.困难
哪种结构能以总共 O(n) 的时间求出数组中每个大小为 k 的窗口的最大值?
- A通过移动元素来更新的有序数组
- B一个按值递减顺序保存下标的双端队列
- C由窗口元素组成的单链表
- D为每个窗口重建的最小堆
答案
- 1. C · 在开头插入元素
- 2. D · 其相邻顶点的列表
- 3. C · 先左子树,再右子树,最后节点
- 4. A · 1
- 5. C · O(1)
- 6. A · 下标 ⌊(i − 1) / 2⌋
- 7. D · O(α(n)),即反阿克曼函数,实际上可视为常数
- 8. B · 一个按值递减顺序保存下标的双端队列
完整分步解答:请在 examproblems.com 上练习本主题。