本文主要是介绍每日一题 2034. 股票价格波动(中等,有序队列),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
- 对于最高和最低价格,维护一个有序的存储所有价格的队列即可实现
- 当执行 update 时,将队列中原来的 price 删除(如果有的话,且耗时O(logn)),然后再插入新的 price 并保持有序(耗时O(logn)),最后更新最新的时间戳
- 在这里如果采用延迟删除的思想,可以省去一个步耗时O(logn)的删除操作,极大减少最后提交测试的耗时
class StockPrice:def __init__(self):self.p = {}self.cur = 0self.l = []def update(self, timestamp: int, price: int) -> None:if len(self.l) == 0:self.l.append(price)self.p[timestamp] = priceself.cur = timestampreturnif timestamp > self.cur:self.cur = timestampif self.p.get(timestamp, -1) != -1:self.l.pop(bisect_left(self.l, self.p[timestamp]))self.p[timestamp] = priceinsort_left(self.l, price)def current(self) -> int:return self.p[self.cur]def maximum(self) -> int:return self.l[-1]def minimum(self) -> int:return self.l[0]
这篇关于每日一题 2034. 股票价格波动(中等,有序队列)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!