LeetCode 895 最大频率栈[Map] HERODING的LeetCode之路

LeetCode 895 最大频率栈[Map] HERODING的LeetCode之路_第1张图片
解题思路:
定义两个map,一个维护数字的频率,一个维护每个频率对应的数字组成的数组,输入进来更新两个map,当需要输出的时候,将最大频率对应的数组中最后的数取出返回,并更新该数频率map,删除其在最大频率数组中的位置,如果最大频率map维护的数组为空,将该频率删除,代码如下:

class FreqStack {
private:
    unordered_map<int, int> count;
    map<int, vector<int>> freq;
public:
    FreqStack() {

    }
    
    void push(int val) {
        count[val] ++;
        freq[count[val]].push_back(val);
    }
    
    int pop() {
        // 频率最大的数组
        auto iter = --freq.end();
        int target = iter->second.back();
        count[target] --;
        iter->second.pop_back();
        if(iter->second.size() == 0) {
            freq.erase(iter->first);
        }
        return target;
    }
};

/**
 * Your FreqStack object will be instantiated and called as such:
 * FreqStack* obj = new FreqStack();
 * obj->push(val);
 * int param_2 = obj->pop();
 */

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展,数据结构,c++)