class StockPrice {
int maxTimestamp;//最大时间戳
HashMap<Integer, Integer> timePriceMap;//哈希表记录时间戳和价格
TreeMap<Integer, Integer> prices;//排序后的价格及其数量(不同时间戳价格可能相同)
//初始化
public StockPrice() {
maxTimestamp = 0;
timePriceMap = new HashMap<Integer, Integer>();
prices = new TreeMap<Integer, Integer>();
}
public void update(int timestamp, int price) {
maxTimestamp = Math.max(maxTimestamp, timestamp);//更新最大时间戳
int prevPrice = timePriceMap.getOrDefault(timestamp, 0);//获取该时间戳之前价格,无则为0
timePriceMap.put(timestamp, price);//更新哈希表
if (prevPrice > 0)
{
prices.put(prevPrice, prices.get(prevPrice) - 1);//如果已经存在该时间戳,移除一个价格
//移除完则删除
if (prices.get(prevPrice) == 0)
{
prices.remove(prevPrice);
}
}
prices.put(price, prices.getOrDefault(price, 0) + 1);//如果不存在该时间戳,添加最新价格
}
public int current() {
return timePriceMap.get(maxTimestamp);
}
public int maximum() {
return prices.lastKey();
}
public int minimum() {
return prices.firstKey();
}
}