排队编码面试攻略
队列是一种线性数据结构,用于维护元素序列,并可以通过在序列的一端添加元素(入队)和从另一端移除元素(出队)来进行修改。通常,元素添加到序列末尾的地方被称为队列的后部、尾部或后端,而元素移除的地方则被称为队列的前部或前端。作为一种抽象数据类型,队列可以使用数组或单链表来实现。
这种行为通常称为FIFO(先进先出)。这种结构类型的名称“队列”来源于现实生活中人们排队的类比,等待商品或服务。
广度优先搜索通常使用队列实现。
学习资源
阅读材料 - 是否应该使用队列,basecs 视频 - 队列,加利福尼亚大学圣地亚哥分校
实现
语言 | API |
---|---|
C++ | std::queue |
Java | java.util.Queue .使用java.util.ArrayDeque |
Python | queue |
JavaScript | N/A |
时间复杂度
操作 | 大O表示法 |
---|---|
入队/提供 | O(1) |
出队/轮询 | O(1) |
前端 | O(1) |
后端 | O(1) |
为空 | O(1) |
面试时需要注意的事项
大多数语言没有内置的队列类可以使用,候选人通常使用数组(JavaScript)或列表(Python)作为队列。然而,请注意,在这种情况下,出队操作(假设队列的前端在左侧)将是O(n),因为它需要将所有其他元素向左移动一个位置。在这种情况下,你可以向面试官指出这一点,并说你假设有一个具有高效出队操作的数据结构作为队列使用。
注意事项
- 空队列
- 只含一个元素的队列
- 含有两个元素的队列
必备问题
如果你正在为这个主题学习,这是练习这些问题的基本问题。
推荐练习问题
在你已经为这个主题学习和练习了基本问题之后,这是推荐的练习问题。
推荐课程
import AlgorithmCourses from '../_courses/AlgorithmCourses.md'