返回

LeetCode 2034:股票价格波动:使用哈希表、有序集合和优先队列解决算法题

闲谈

简介

LeetCode 2034:股票价格波动,是一个算法题,要求您设计一个数据结构来跟踪股票价格的波动。给定一个股票价格的时间序列,您需要能够回答以下查询:

  • 过去一段时间内股票价格的最高值
  • 过去一段时间内股票价格的最低值
  • 过去一段时间内股票价格的平均值

解决方案

为了解决这个问题,我们可以使用哈希表、有序集合和优先队列这三种数据结构。哈希表用于存储股票价格的时间戳和价格。有序集合用于存储股票价格的最高值和最低值。优先队列用于存储股票价格的平均值。

具体来说,我们可以使用以下步骤来解决这个问题:

  1. 初始化哈希表、有序集合和优先队列。
  2. 对于给定的股票价格时间序列,依次处理每个时间戳和价格。
  3. 将时间戳和价格添加到哈希表中。
  4. 将价格添加到有序集合中。
  5. 将价格添加到优先队列中。
  6. 对于给定的查询,我们可以使用以下步骤来回答:
    • 过去一段时间内股票价格的最高值:从有序集合中获取最大值。
    • 过去一段时间内股票价格的最低值:从有序集合中获取最小值。
    • 过去一段时间内股票价格的平均值:从优先队列中获取平均值。

实现细节

以下是使用哈希表、有序集合和优先队列解决LeetCode 2034题的Python代码示例:

import heapq

class StockPrice:

    def __init__(self):
        self.timestamp_to_price = {}
        self.max_prices = []
        self.min_prices = []
        self.sum_prices = 0
        self.count = 0

    def update(self, timestamp: int, price: int) -> None:
        self.timestamp_to_price[timestamp] = price

        heapq.heappush(self.max_prices, -price)
        heapq.heappush(self.min_prices, price)

        self.sum_prices += price
        self.count += 1

    def current(self) -> int:
        return self.timestamp_to_price[max(self.timestamp_to_price)]

    def maximum(self) -> int:
        return -heapq.heappop(self.max_prices)

    def minimum(self) -> int:
        return heapq.heappop(self.min_prices)

    def average(self) -> float:
        return self.sum_prices / self.count


# 测试代码
stock_price = StockPrice()
stock_price.update(1, 10)
stock_price.update(2, 20)
stock_price.update(3, 30)

print(stock_price.current())  # 输出:30
print(stock_price.maximum())  # 输出:30
print(stock_price.minimum())  # 输出:10
print(stock_price.average())  # 输出:20.0

时间复杂度分析

使用哈希表、有序集合和优先队列来解决LeetCode 2034题的时间复杂度如下:

  • 初始化:O(1)
  • 更新:O(log n)
  • 当前价格:O(1)
  • 最高价格:O(log n)
  • 最低价格:O(log n)
  • 平均价格:O(1)

其中,n 是时间序列中的股票价格数量。