题目:
?
分析:
? ? ? ? 看到这题首先进行分析,最大最小是去绝对price,最新取决去最大的times,初始化就是一个类的初始化,updata就是放值的过程,所以我们可以为price与times作一个哈希表,用一个int来存最大的times,用一个有序集合来进行最大最小的取值。
代码:
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);
? ? ? ? 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();
? ? }
}
|