895. 最大频率栈
设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。
实现 FreqStack 类:
FreqStack() 构造一个空的堆栈。
void push(int val) 将一个整数 val 压入栈顶。
int pop() 删除并返回堆栈中出现频率最高的元素。
如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-frequency-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
class FreqStack {
private Map freqMap;
private Map> groupMap;
private int maxFreq;
public FreqStack() {
freqMap = new HashMap<>();
groupMap = new HashMap<>();
maxFreq = 0;
}
public void push(int x) {
int f = freqMap.getOrDefault(x, 0) + 1;
freqMap.put(x, f);
if (f > maxFreq) {
maxFreq = f;
}
groupMap.computeIfAbsent(f, k -> new Stack<>()).push(x);
}
public int pop() {
Integer x = groupMap.get(maxFreq).pop();
freqMap.put(x, freqMap.get(x) - 1);
if (groupMap.get(maxFreq).size() == 0) {
maxFreq--;
}
return x;
}
}
/**
* Your FreqStack object will be instantiated and called as such:
* FreqStack obj = new FreqStack();
* obj.push(val);
* int param_2 = obj.pop();
*/