核心思路:
- 把频率(出现次数)不同的元素,压入不同的栈中。
- 每次出栈时,弹出含有频率最高元素的栈的栈顶。
class FreqStack {
unordered_map<int,int> cnt;
vector<stack<int>> v;
//cnt[val] 指val的出现频率
public:
void push(int val) {
if(cnt[val]==v.size()) v.push_back({}); //如果该元素频率等于目前频率栈的个数 则下一次需要开新栈
v[cnt[val]].push(val); //元素入cnt[val]次频率栈
cnt[val]++;
}
int pop() {
int val=v.back().top(); //弹出最右侧(最大频率栈)的栈顶
v.back().pop();
if(v.back().empty()) v.pop_back(); //如果该频率栈里元素为空 则删除该频率栈
cnt[val]--;
return val;
}
};
c++ vector容器和stack容器详解:
【C++常用】set + map + vector + stack + queue + 优先队列_Roye_ack的博客-CSDN博客