算法总结——堆栈

先说stack的题目

stack的实现:链表,数组

题目:

(1)简单的:min stack,一个数组实现三个stack

(2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解)

(3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(two sum思路)

(4)***stack排序问题***:为stack排序,从柱状图里找最大矩形(本质上类似stack排序),构造数组的maxtree(和最大矩形题目类似思路)

(5)蛋疼的其他问题:仅使用递归反转一个stack(两个递归函数,***hard***)

再说队列的题目

队列的实现:链表

扫描二维码关注公众号,回复: 4676501 查看本文章

题目:猫狗队列(链表合并),两个stack实现队列,数组滑动窗口的最大值(类似stack排序做,和柱状里找最大矩形题目解法有点类似,***hard***)

最后是堆的题目

题目:

(1)经典问题:合并多个有序链表,行列有序矩阵topK(k*logk解法,j+1,i+1)

(2)***需要观察总结规律的***:数组滑动窗口的最大值(使用优先级队列剔除“过期”的最大值),最大值-最小值<=num的子数组数目(滑动窗口+堆)

猜你喜欢

转载自www.cnblogs.com/bonelee/p/10188204.html