leetcode 最大频率栈 困难

leetcode 最大频率栈 困难

 

 

共用三个成员来进行维护:

维护每个数出现的次数 numsCnt;

维护每一种次数包含哪一些数 timesToNum,并且越晚入栈的数越靠后;注意:假设一个数出现次数为5,这个数一样会出现在  timesToNum[4,3,2,1] 的 list 中.... (但仔细一算,空间复杂度还是 O(n))

维护最大次数的值 maxx;

详看代码:

class FreqStack {
public:
    FreqStack() {

    }

    void push(int val) {
        ++ numsCnt[val];
        timesToNum[numsCnt[val]].push_back(val);
        maxx = max(maxx, numsCnt[val]);
    }

    int pop() {
        int ret = timesToNum[maxx].back();
        timesToNum[maxx].pop_back();
        -- numsCnt[ret];
        if(timesToNum[maxx].empty()) {
            -- maxx;
        }
        return ret;
    }

private:
    unordered_map<int, int> numsCnt;    // 数出现的次数
    unordered_map<int, list<int>> timesToNum;     // 次数对应的数
    int maxx = 0;
};

 

上一篇:不与最大数相同的数字之和


下一篇:剑指 Offer 61. 扑克牌中的顺子(简单)