LeetCode Summary STL Stack Queue



--------------------------------- map/set/vector -----------------------------------------
380. Insert Delete GetRandom O(1)(设计一个数据结构,可以插入、删除、随机返回元素)
381. Insert Delete GetRandom O(1) - Duplicates allowed(有冗余)
S1(Mine): 用set或者multiset来存数,很慢
S2(Discuss): 
存vector里面,用map记录每个值在vector里的位置。
删除时,找到在vector里的位置,跟最后一个交换,然后删除最后一个。

146. LRU Cache(设计一个类,固定大小的cache,可以创建,获取,修改key,val;当超过容量时,存放最近使用过的)
S(Mine): 用两个map,一个存时间片,一个存key val对,很慢*5
S(Discuss): 用list存(key,val)对,用map存list的指针,list可以push_front(),pop_back()就不用控制时间片了,直接前来后到
239. Sliding Window Maximum(长度为k的窗口移动,求值)
Mine: multiset 求最大值
284. Peeking Iterator(完成peek(),netx(),hasNext()函数)
Discuss: 
373. Find K Pairs with Smallest Sums(两列数各取一个,找到和最小的k对)
Mine: 直接求所有和,丢进vector,写cmp,然后sort,输出前k个
Discuss: 用heap维持k对
------------------------------------ Stack ----------------------------------------------
173. Binary Search Tree Iterator(设计含有next()函数的排序二叉树)
Discuss:初始化时,向左遍历至最左端,并将路过的元素压入栈。


155. Min Stack(小栈,返回栈中最小元素)
Mine: stack<int> mi 记录小元素。push(x),若mi空或者x<=mi.top,入mi;pop(x),若x==mi.top(),mi.pop()


225. Implement Stack using Queues(用栈实现队列)
394. Decode String(字符串展开)
Mine: 使用stack,根据[或者],选择入栈出栈。
388. Longest Absolute File Path(最长绝对路径)
Discuss: 


------------------------------------ Queue -----------------------------------------
232. Implement Queue using Stacks(队列实现栈)


计算表达式
注意使用stringstream方便输入和输出
定义优先级
224. Basic Calculator(计算基础表达式)
S(Mine): 符号栈,数字栈
227. Basic Calculator II
150. Evaluate Reverse Polish Notation(逆波兰表达式)
S(Mine): 定义符号优先级,符号栈,数栈,根据优先级入栈出栈。


括号匹配
20. Valid Parentheses(判断一串括号是否匹配)
S(Mine): 用栈,匹配出栈,不匹配false

------------------------------------- Heap --------------------------------------
295. Find Median from Data Stream(找到一串数流的中位数)
注意: 中位数是一串数排序一个后中间的那个数,或者中间两个数的平均值。
Mine: 维护两个heap,minHeap和maxHeap,个数相差顶多1,且minHeap的所有值均小于maxHeap的所有值,使用了multiset
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值