895. Maximum Frequency Stack!
class FreqStack {
HashMap<Integer, Integer> valueToFreqs;
HashMap<Integer, Stack<Integer>> freqToValues;
int maxFreq;
public FreqStack() {
valueToFreqs = new HashMap<>();
freqToValues = new HashMap<>();
}
public void push(int val) {
int freq =valueToFreqs.getOrDefault(val, 0)+1;
valueToFreqs.put(val, freq);
//update freqToValue
if(!freqToValues.containsKey(freq)) freqToValues.put(freq, new Stack<>());
freqToValues.get(freq).push(val);
maxFreq = Math.max(maxFreq, freq);
}
public int pop() {
int value = freqToValues.get(maxFreq).pop();
valueToFreqs.put(value, maxFreq-1);
if(freqToValues.get(maxFreq).isEmpty()){
maxFreq--;
}
return value;
}
}
/**
* Your FreqStack object will be instantiated and called as such:
* FreqStack obj = new FreqStack();
* obj.push(val);
* int param_2 = obj.pop();
*/Last updated
Was this helpful?