Q51 Maximum Frequency Stack - LeetCode

PHOTO EMBED

Mon Jan 30 2023 15:44:41 GMT+0000 (Coordinated Universal Time)

Saved by @Ayush_dabas07

class FreqStack {
    
    //make 2 HM 1->(frequency , stack) 2->(value , frequency)
        
        //adding same frequency values together in stack
        HashMap<Integer,Stack<Integer>> freq ;

        //which frequency does value belongs to  
        HashMap<Integer,Integer> pos ;

        //also a max frequency to keep track of max frequency
        int max;
    
    //constructor
    public FreqStack() {
        this.freq = new HashMap<>();
        this.pos = new HashMap<>();
        this.max = 0;
    }
    
    public void push(int val) {
            //get position of val or default 
            int position = pos.getOrDefault(val,0);
            position++;
            //update position
            pos.put(val , position);

            //create a stack if its a new frequency
            if(freq.containsKey(position)==false)
            freq.put(position,new Stack<>());

            //push the character
            freq.get(position).push(val);
            
            //update max frequency
            max = Math.max(max,position);
    }
    
    public int pop() {
        int val = freq.get(max).pop();  //removing max frequency element
        
        //updating max and position frequency
        pos.put(val,max-1);

        if(freq.get(max).size()==0) //if max frequency stack becomes empty
        max--;

        return val;
    }
}

/**
 * Your FreqStack object will be instantiated and called as such:
 * FreqStack obj = new FreqStack();
 * obj.push(val);
 * int param_2 = obj.pop();
 */
content_copyCOPY

https://leetcode.com/problems/maximum-frequency-stack/