LeetCode - Maximum Frequency Stack

Posted IncredibleThings

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode - Maximum Frequency Stack相关的知识,希望对你有一定的参考价值。

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.
Hash map 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 {
    
    HashMap<Integer, Integer> map;
    HashMap<Integer, Stack<Integer>> 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<Integer>());
            
        }
        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();
 */

 





以上是关于LeetCode - Maximum Frequency Stack的主要内容,如果未能解决你的问题,请参考以下文章

#Leetcode# 53. Maximum Subarray

LeetCode 53. Maximum Subarray

LeetCode -- Maximum Product Subarray

leetcode 53. Maximum Subarray

LeetCode Third Maximum Number

LeetCode Create Maximum Number