Media
Google
https://leetcode.com/problems...

class StockPrice {
    // key: time, value: price
    private Map<Integer, Integer> timePrice;
    // key: price, value: frequency,使用tree map,使得按照price从小到大排序,方便直接获取max / min
    private TreeMap<Integer, Integer> priceFreq;
    private int latestTime; // 最新的时间

    public StockPrice() {
        timePrice = new HashMap<>();
        latestTime = 0;
        priceFreq = new TreeMap<>();
    }

    public void update(int timestamp, int price) {
        // 更新最新时间,一直让latestTime保持为最近的时间戳,在调用current方法时,直接从map中获取
        latestTime = Math.max(latestTime, timestamp);
        // 如果时间戳之前保存过,那么对频率表进行更新
        if (timePrice.containsKey(timestamp)) {
            // 根据时间戳,拿到之前的旧price
            int oldPrice = timePrice.get(timestamp);
            // 因为更改了,所以把频率-1
            priceFreq.put(oldPrice, priceFreq.get(oldPrice) - 1);
            // 如果该price频率更改后为0,那么需要移除该price
            if (priceFreq.get(oldPrice) == 0) priceFreq.remove(oldPrice);
        }
        // 分别更新两个map中的新的price
        timePrice.put(timestamp, price);
        priceFreq.put(price, priceFreq.getOrDefault(price, 0) + 1);
    }

    public int current() {
        // 根据最新时间直接获取price
        return timePrice.get(latestTime);
    }

    public int maximum() {
        // 从priceFreq中直接取最后那个最大price
        return priceFreq.lastKey();
    }

    public int minimum() {
        // 从priceFreq中直接取第一个最小的price
        return priceFreq.firstKey();
    }
}

proheart
41 声望20 粉丝

Developer, Java & Android