博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - Maximum Frequency Stack
阅读量:5975 次
发布时间:2019-06-20

本文共 2596 字,大约阅读时间需要 8 分钟。

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
map; 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(); */

 

转载于:https://www.cnblogs.com/incrediblechangshuo/p/10010636.html

你可能感兴趣的文章
Leetcode03
查看>>
Mysql常用命令
查看>>
Vuex的基本使用
查看>>
在DigitalOcean玩Kubernetes(K8S)
查看>>
Linux阶段总结shell脚本
查看>>
JUKI贴片机RX-7R_JUKI贴片机_贴片机
查看>>
字符串中不重复字符出现第一次的位置
查看>>
Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上...
查看>>
2018年,JavaScript都经历了什么?
查看>>
中了后缀adobe勒索病毒怎么办 恢复方法百分百解密成功[veracrypt@foxmail.com
查看>>
315 · Istio1.1 功能预告,真的假不了
查看>>
校园刷脸考勤
查看>>
驰骋工作流引擎设计系列10时效考核规则设计
查看>>
已经入门了C++,后面的路怎么走?
查看>>
建筑论文如何发表
查看>>
制作基于http的yum源2
查看>>
我的友情链接
查看>>
马哥linux学习笔记:openssl的使用
查看>>
我的友情链接
查看>>
deep learning 作業 2.2
查看>>