Implement FreqStack, a class which simulates the operation of a stack-like data structure.FreqStack has two functions:push(int x), which pushes an integer x onto the stack.pop(), which removes and returns the most frequent element in the stack.If there is a tie for most frequent element, the element closest to the top of the stack is removed and returned. Example 1:Input: ["FreqStack","push","push","push","push","push","push","pop","pop","pop","pop"],[[],[5],[7],[5],[7],[4],[5],[],[],[],[]]Output: [null,null,null,null,null,null,null,5,7,5,4]Explanation:After making six .push operations, the stack is [5,7,5,7,4,5] from bottom to top. Then:pop() -> returns 5, as 5 is the most frequent.The stack becomes [5,7,5,7,4].pop() -> returns 7, as 5 and 7 is the most frequent, but 7 is closest to the top.The stack becomes [5,7,5,4].pop() -> returns 5.The stack becomes [5,7,4].pop() -> returns 4.The stack becomes [5,7]. Note:Calls to FreqStack.push(int x) will be such that 0 <= x <= 10^9.It is guaranteed that FreqStack.pop() won't be called if the stack has zero elements.The total number of FreqStack.push calls will not exceed 10000 in a single test case.The total number of FreqStack.pop calls will not exceed 10000 in a single test case.The total number of FreqStack.push and FreqStack.pop calls will not exceed 150000 across all test cases.
Hash map freq
will count the frequence of elements.
m
is a map of stack.If element x
has n frequence, we will push x
n times in m[1], m[2] .. m[n]
maxfreq
records the maximum frequence.
push(x)
will push x
tom[++freq[x]]
pop()
will pop from the m[maxfreq]
class FreqStack { HashMapmap; HashMap > freMap; int mostFreq; public FreqStack() { map = new HashMap<>(); freMap = new HashMap<>(); mostFreq = 0; } public void push(int x) { int freq = map.getOrDefault(x, 0)+1; map.put(x, freq); mostFreq = Math.max(mostFreq, freq); if(!freMap.containsKey(freq)){ freMap.put(freq, new Stack ()); } freMap.get(freq).push(x); } public int pop() { int x = freMap.get(mostFreq).pop(); map.put(x, mostFreq-1); if(freMap.get(mostFreq).size() == 0){ freMap.remove(mostFreq); mostFreq --; } return x; }}/** * Your FreqStack object will be instantiated and called as such: * FreqStack obj = new FreqStack(); * obj.push(x); * int param_2 = obj.pop(); */