力扣2034. 股票价格波动
这道题首先可以使用暴力法,在__init__初始化时用max来每次排序拿取最大的时间戳,在最终结果分别用max取最大min取最小值。这样做可以实现,但是时间复杂度很高。我们可以用哈希表+有序列表来解决时间戳有序的问题,使用哈希表能更快地找到要替换的元素。
from sortedcontainers import SortedList
class StockPrice:
def __init__(self):
self.max_time = 0
self.price = SortedList() # 使用有序列表存放价格
self.res = {}
def update(self, timestamp: int, price: int) -> None:
if timestamp in self.res: # 如果结果集中存放了时间戳
self.price.remove(self.res[timestamp]) # 结果集删除掉哈希表对应的结果
self.price.add(price) # 存入新的价格
self.res[timestamp] = price # 将新价格及时间戳放入哈希表
self.max_time = max(self.max_time, timestamp)
def current(self) -> int:
return self.res[self.max_time]
def maximum(self) -> int:
return self.price[-1] # 有序列表中最后一位即为最大值
def minimum(self) -> int:
return self.price[0] # 有序列表中第一位即为最大值
stockPrice = StockPrice()
stockPrice.update(1, 10)
stockPrice.update(2, 5)
print(stockPrice.current()) # 5
print(stockPrice.maximum()) # 10
stockPrice.update(1, 3)
print(stockPrice.maximum()) # 5
stockPrice.update(4, 2)
print(stockPrice.minimum()) # 2
END