生成一段单调队列的代码
时间: 2023-05-29 17:06:13 浏览: 94
队列的代码
单调队列是一种特殊的队列,它可以在O(1)时间内找到队列中的最大或最小值。以下是一个简单的单调队列的代码实现:
```python
from collections import deque
def monotonic_queue(nums, k):
"""
:param nums: List[int]
:param k: int
:return: List[int]
"""
q = deque() # 单调队列
res = [] # 结果列表
# 首先处理前k个元素
for i in range(k):
# 如果队列不为空,且队尾元素小于当前元素,则弹出队尾元素
while q and nums[q[-1]] < nums[i]:
q.pop()
q.append(i) # 将当前元素下标加入队列
# 处理剩余元素
for i in range(k, len(nums)):
# 记录队首元素即为当前窗口的最大元素
res.append(nums[q[0]])
# 如果队首元素不在当前窗口中,则弹出队首元素
if q and q[0] <= i - k:
q.popleft()
# 如果队列不为空,且队尾元素小于当前元素,则弹出队尾元素
while q and nums[q[-1]] < nums[i]:
q.pop()
q.append(i) # 将当前元素下标加入队列
# 处理最后一个窗口的最大值
res.append(nums[q[0]])
return res
```
以上代码中,我们使用了一个双向队列来维护单调队列,队列中存储的是数组的下标。首先处理前k个元素,将它们加入队列中。在处理剩余元素时,我们记录队首元素即为当前窗口的最大元素,并判断队首元素是否在当前窗口中,如果不在则弹出队首元素。然后将当前元素加入队列中,并弹出队列中所有小于当前元素的元素。最后处理最后一个窗口的最大值,将它加入结果列表中并返回。
阅读全文