895. Maximum Frequency Stack!

valueToFreq map and freqToValue map<Integer, 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?