Queue / Deque
FIFO (First In, First Out). The backbone of BFS. Use collections.deque in Python for O(1) pops from both ends.
Properties
- Enqueue (right) / Dequeue (left): O(1) with deque
list.pop(0)is O(n) — always usedequefor queues
from collections import deque
q = deque()
q.append(val) # enqueue right
q.appendleft(val) # enqueue left
q.popleft() # dequeue left (O(1))
q.pop() # dequeue right (O(1))
q[0] # peek frontDeque as Sliding Window Maximum
A monotonic deque can track the maximum of a sliding window in O(1) amortized.
from collections import deque
dq = deque() # stores indices, decreasing order of values
for i, num in enumerate(nums):
while dq and nums[dq[-1]] < num:
dq.pop() # remove smaller elements from back
dq.append(i)
if dq[0] <= i - k:
dq.popleft() # remove elements outside window
if i >= k - 1:
result.append(nums[dq[0]]) # front is always the maxPatterns That Use This
BFS — level-order traversal, shortest path Monotonic Stack — sliding window max/min uses a monotonic deque