--------------------------------- 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