[Leetcode]895.最大频率栈
Problem
实现 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]。
Solution
这道题目我使用了两个哈希表:
Freq用来统计数字出现的次数: integer->unsigned
FreqStack用来统计出现次数所对应的栈:unsigned->stack<int>
主要的解法是为每次出现第几次的元素建一个栈,比如
1,3,4,5,1,1,
那么1,3,4,5就会在FreqStack[1]上因为他们的出现次数为1
而第二次出现的1就会压入FreqStack[2],第三次出现的1会出现在FreqStack[3],以此类推。
在Freq哈希表的辅助下,判断出现次数会相当容易。AC代码如下
class FreqStack {
public:
void push(int x) {
Freq[x]++;
maxfreq = max(Freq[x], maxfreq);
FreqStack[Freq[x]].push(x);
}
int pop() {
int x = FreqStack[maxfreq].top();
FreqStack[maxfreq].pop();
if(FreqStack[Freq[x]].empty())
maxfreq--;
Freq[x]--;
return x;
}
private:
unordered_map<int, unsigned> Freq;
unordered_map<unsigned, stack<int>> FreqStack;
unsigned maxfreq = 0;
};
[Leetcode]895.最大频率栈的更多相关文章
- [LeetCode] 895. Maximum Frequency Stack 最大频率栈
Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...
- leetcode Maximal Rectangle 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052721.html 题目链接:leetcode Maximal Rectangle 单调栈 ...
- LeetCode 155:最小栈 Min Stack
LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- ...
- [LeetCode] Min Stack 最小栈
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- [LeetCode] Max Stack 最大栈
Design a max stack that supports push, pop, top, peekMax and popMax. push(x) -- Push element x onto ...
- [Swift]LeetCode895. 最大频率栈 | Maximum Frequency Stack
Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...
- 最大频率栈 Maximum Frequency Stack
2018-10-06 22:01:11 问题描述: 问题求解: 为每个频率创建一个栈即可. class FreqStack { Map<Integer, Integer> map; Lis ...
- LeetCode刷题总结-栈、链表、堆和队列篇
本文介绍LeetCode上有关栈.链表.堆和队列相关的算法题的考点,推荐刷题20道.具体考点分类如下图: 一.栈 1.数学问题 题号:85. 最大矩形,难度困难 题号:224. 基本计算器,难度困难 ...
- LeetCode 895. Maximum Frequency Stack
题目链接:https://leetcode.com/problems/maximum-frequency-stack/ 题意:实现一种数据结构FreqStack,FreqStack需要实现两个功能: ...
随机推荐
- [Jenkins Git] 在Jenkins上拉代码总是失败,跑去本地看,提示输入用户名和密码,但是Jenkins上已经配置了正确的用户名和密码
git config --global credential.helper manager
- mvc @helper 创建用户自定义html
转载地址:https://www.cnblogs.com/caofangsheng/p/5670071.html
- appium sendkeys 输入数字丢失问题
参考:https://blog.csdn.net/rainshine1190/article/details/82814503
- union: php/laravel command
#########Laravel###############2018-01-09 16:46:26 # switch to maintenance mode php artisan down # s ...
- C++实现文件内字符数、单词数、行数的统计
先给出github上的代码链接以及项目需求 1. 项目简介 这个项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处 ...
- 不能ping通主机名
https://www.linuxidc.com/Linux/2017-03/142253.htm sudo apt-get install winbind , sudo apt-get instal ...
- day 34
1 .内容回顾 #__author : 'liuyang' #date : 2019/4/17 0017 上午 9:01 # 利大于弊,则做之 # 会死于斯,则不去 # 2个 人 晚上 5个题 面试题 ...
- fastjson 序列化,反序列化Map对象的顺序问题
使用JSONObject 读取JSON字符串时,读取出来的数据,通过变量时是无序的. 但是业务希望返回是顺序的. String str="{name:\"A\",add ...
- java开发师笔试面试每日12题(2)
1.Volatile和Synchronized不同点 (1).volatile只能作用于变量,使用范围较小.synchronized可以用在变量.方法.类.同步代码块等,使用范围比较广. (2).vo ...
- File(File f, String child) File(String parent, String child)
(转载)File(File f, String child) 根据f 抽象路径名和 child 路径名字符串创建一个新 File 实例. f抽象路径名用于表示目录,child 路径名字符串用于表示目录 ...