码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode - Maximum Frequency Stack

时间:2018-11-24 11:48:46      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:data   xpl   maximum   turn   hash   record   cross   push   single   

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

标签:data   xpl   maximum   turn   hash   record   cross   push   single   

原文地址:https://www.cnblogs.com/incrediblechangshuo/p/10010636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!