优先队列(Priority Queue):一种特殊的队列。优先队列的出队顺序跟入队顺序无关,优先队列是按照元素的优先级来决定出队顺序的。优先级高的元素优先出队,符合 「最高级先出(First in, Largest out)」 的规则。
使用二叉堆来实现的优先队列效率比较高。
Python 中的 heapq 模块提供了优先队列算法。函数 heapq.heappush() 用于在队列 queue 上插入一个元素。heapq.heappop() 用于在队列 queue 上删除一个元素。
优先队列经典题目
-
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
n = len(nums)
if n == 0 or k == 0:
return []
queue = []
res = []
head = 0
for i in range(n):
if head < len(queue) and queue[head] <= i-k:
head += 1
while head < len(queue) and nums[i] >= nums[queue[-1]]:
queue.pop()
queue.append(i)
if i - k + 1 >= 0:
res.append(nums[queue[head]])
return res