解题思路:
首先定义map用于记录时间-价格,由于记录的价格可能有标错误的情况,那么在更新的时候,错误的价格要抹去,这间接影响着最大价格和最小价格,所以可以用一个multiset维持当前正确的价格集合,每次需要更新的时候,也要更新该数组,返回最大值和最小值,直接调用multiset的rbegin()和begin()即可,至于最新价格,只要记录最新日期即可,代码如下:
class StockPrice {
private:
unordered_map<int, int> mp;
int maxTime;
multiset<int> prices;
public:
StockPrice() {
this->maxTime = 0;
}
void update(int timestamp, int price) {
maxTime = max(maxTime, timestamp);
int prev = mp.count(timestamp) == 0 ? 0 : mp[timestamp];
mp[timestamp] = price;
// 说明有弄错的
if(prev > 0) {
auto it = prices.find(prev);
if(it != prices.end()) {
prices.erase(it);
}
}
prices.emplace(price);
}
int current() {
return mp[maxTime];
}
int maximum() {
return *prices.rbegin();
}
int minimum() {
return *prices.begin();
}
};
/**
* Your StockPrice object will be instantiated and called as such:
* StockPrice* obj = new StockPrice();
* obj->update(timestamp,price);
* int param_2 = obj->current();
* int param_3 = obj->maximum();
* int param_4 = obj->minimum();
*/