队列概述
- 队列的特点:先进先出
- 分类
- 单端队列:只有一个口可以进,一个口可以出
- 双端队列:两个口都可以进,两个口都可以出
队列的四种操作(单端队列为例)
- 访问 Access 时间复杂度 O(N)
遍历从前往后一个个找,从而进行访问 - 搜索 Search 时间复杂度 O(N)
需要对队列进行遍历查找 - 插入 Insert 时间复杂度 O(1)
只能在尾端插入
- 删除 Remove 时间复杂度 O(1)
只能删除队列头
队列实际的常用操作(Java)
创建队列
//Create a queue
Queue<Integer> queue = new LinkedList<>();
添加元素
//Add element
//Time Complexity:O(1)
queue.add(1);
queue.add(2);
queue.add(3);
//[1,2,3]
System.out.println(queue.toString());
获取即将出队的元素
//Get the head of queue
//Time Complexity:O(1)
int temp1 = queue.peek();
//1
System.out.println(temp1);
删除即将出队的元素
//Remove the head of queue
//Time Complexity:O(1)
int temp2 = queue.poll();
//1
System.out.println(temp2);
//[2,3]
System.out.println(queue.toString());
判断队列是否为空
//Queue is empty?
//Time Complexity:O(1)
//false
System.out.println(queue.isEmpty());
队列长度
//The length of Queue
// Time Complexity:O(1)
//2
System.out.println(queue.size());
遍历队列
//Time Complexity:O(1) 边删除边遍历
while (!queue.isEmpty()) {
int temp = queue.poll();
System.out.println(temp);
}
LeetCode练习
#933
参考:https://www.bilibili.com/read/cv8623247?spm_id_from=333.788.b_636f6d6d656e74.14