队列概述
- 队列的特点:先进先出
- 分类
- 单端队列:只有一个口可以进,一个口可以出
- 双端队列:两个口都可以进,两个口都可以出
队列的四种操作(单端队列为例)
- 访问 Access 时间复杂度 O(N)
遍历从前往后一个个找,从而进行访问 - 搜索 Search 时间复杂度 O(N)
需要对队列进行遍历查找 - 插入 Insert 时间复杂度 O(1)
只能在尾端插入
- 删除 Remove 时间复杂度 O(1)
只能删除队列头
队列实际的常用操作(Java)
创建队列
//Create a queueQueue<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();//1System.out.println(temp1);
删除即将出队的元素
//Remove the head of queue//Time Complexity:O(1)int temp2 = queue.poll();//1System.out.println(temp2);//[2,3]System.out.println(queue.toString());
判断队列是否为空
//Queue is empty?//Time Complexity:O(1)//falseSystem.out.println(queue.isEmpty());
队列长度
//The length of Queue// Time Complexity:O(1)//2System.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
