题目简介:
设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。
实现 FreqStack
类:
FreqStack()
构造一个空的堆栈。void push(int val)
将一个整数val
压入栈顶。int pop()
删除并返回堆栈中出现频率最高的元素。- 如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。
示例 1:
1 | 输入: |
提示:
0 <= val <= 10^9
push
和pop
的操作数不大于2 * 10^4
。- 输入保证在调用
pop
之前堆栈中至少有一个元素。
思路:
创建两个哈希表,一个用于存储每个元素出现的频率,另一个存储某个频率下的元素集合(利用栈存储)。
因此,压入操作时,我们将该元素频率加一,并加入到对应的栈中,并更新元素的最大频率。
弹出操作时,根据最大频率找到对应的栈进行弹出操作。若弹出后该栈为空,则将max_freq--
。
代码如下:
1 | class FreqStack { |