引言
队列这种数据结构,据瓶子君了解,前端需要了解的队列结构主要有:双端队列、滑动窗口,它们都是算法中是比较常用的数据结构。
因此,本节主要内容为:
- 数据结构:队列(Queue)
- 双端队列(Deque)
- 双端队列的应用:翻转字符串中的单词
- 滑动窗口
- 滑动窗口应用:无重复字符的最长公共子串
- 最后来一道 leetcode 题目:滑动窗口最大值问题
下面进入正文吧?
一、数据结构:队列
队列和栈类似,不同的是队列是先进先出 (FIFO) 原则的有序集合,它的结构类似如下:
常见队列的操作有:enqueue(e)
进队、 dequeue()
出队、 isEmpty()
是否是空队、 front()
获取队头元素、clear()
清空队,以及 size()
获取队列长度。
代码实现
function Queue() {
let items = []
this.enqueue = function(e) {
items.push(e)
}
this.dequeue = function() {
return items.shift()
}
this.isEmpty = function() {
return items.length === 0
}
this.front = function() {
return items[0]
}
this.clear = function() {
items = []
}
this.size = function() {
return items.length
}
}
查找:从对头开始查找,从时间复杂度为 O(n)
插入或删除:进栈与出栈的时间复杂度为 O(1)