排队编码面试攻略

队列是一种线性数据结构,用于维护元素序列,并可以通过在序列的一端添加元素(入队)和从另一端移除元素(出队)来进行修改。通常,元素添加到序列末尾的地方被称为队列的后部、尾部或后端,而元素移除的地方则被称为队列的前部或前端。作为一种抽象数据类型,队列可以使用数组或单链表来实现。

这种行为通常称为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'