力扣895.最大频率栈
-
栈
- 用一个哈希表存各数出现次数,一个全是栈的数组存出现i次的栈
- 每次从最右侧的栈开始删即可
- 动画演示:https://leetcode.cn/problems/maximum-frequency-stack/solutions/1998430/mei-xiang-ming-bai-yi-ge-dong-hua-miao-d-oich/
class FreqStack { vector<stack<int>> stacks; unordered_map<int,int> cnt; public: void push(int val) { //当前数是出现最多的,开一个新的 if(cnt[val] == stacks.size()) stacks.push_back({}); stacks[cnt[val]].push(val); cnt[val] ++; } int pop() { int val = stacks.back().top(); stacks.back().pop(); //最右侧栈空,弹出 if(stacks.back().empty()) stacks.pop_back(); cnt[val] --; return val; } };