实现 FreqStack,模拟类似栈的数据结构的操作的一个类。
FreqStack 有两个函数:
push(int x),将整数x推入栈中。pop(),它移除并返回栈中出现最频繁的元素。- 如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。
示例:
输入:
["FreqStack","push","push","push","push","push","push","pop","pop","pop","pop"],
[[],[5],[7],[5],[7],[4],[5],[],[],[],[]]
输出:[null,null,null,null,null,null,null,5,7,5,4]
解释:
执行六次 .push 操作后,栈自底向上为 [5,7,5,7,4,5]。然后:
pop() -> 返回 5,因为 5 是出现频率最高的。
栈变成 [5,7,5,7,4]。
pop() -> 返回 7,因为 5 和 7 都是频率最高的,但 7 最接近栈顶。
栈变成 [5,7,5,4]。
pop() -> 返回 5 。
栈变成 [5,7,4]。
pop() -> 返回 4 。
栈变成 [5,7]。
提示:
- 对
FreqStack.push(int x)的调用中0 <= x <= 10^9。 - 如果栈的元素数目为零,则保证不会调用
FreqStack.pop()。 - 单个测试样例中,对
FreqStack.push的总调用次数不会超过10000。 - 单个测试样例中,对
FreqStack.pop的总调用次数不会超过10000。 - 所有测试样例中,对
FreqStack.push和FreqStack.pop的总调用次数不会超过150000。

本文介绍了一种名为FreqStack的数据结构,它具有push和pop两个关键函数。push用于将整数压入栈中,而pop则移除并返回出现频率最高的元素。若最高频元素有多个,将移除最近被压入栈的元素。通过具体示例展示了其工作原理。

被折叠的 条评论
为什么被折叠?



