问题:
通过给定优先级对元素排序,且每次pop返回优先级最高的那个元素
解决方案:
#原始形式 heappush(堆,项目);heappop(项目)
import heapq
class PriorityQueue:
def __init__(self):
self.queue=[] #排序list
self.index=[] #计数器,用于当优先级相同的情况
def push(self,item,priority): #输入item和优先级
heapq.heappush(self.queue,(-priority,self.index,item)) #先比priority,比不出再比技术(早的先pop出)
self.index += 1
def pop(self):
return heapq.heappop(self.queue)[-1] #pop出最后一个
#使用这个类
class Item:
def __init__(self,name):
self.name = name
def __repr__(self):
return 'Item({!r})'.format(self.name)
#str.format()格式化字符串;return self.name但是以特定格式
#!r -> repr() -> 将对象转化为用解读器读取的形式;返回一个对象的 string 格式
Point
- heappop()返回最小值,这里题目要求返回优先级最高,所以priority前加‘-’
- push和pop操作的复杂度都是log,N很大的时候效率也很高
- {}.format()是格式函数