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