【A】1.3 双端队列
Java 1.0 中附带了一个Stack
类,但是设计得很糟糕,更可取的是双端队列Deque
。它不仅可以用作栈,还可用作队列。
栈通用接口 | 双端队列标准接口 | 队列通用接口 | 双端队列标准接口 |
---|---|---|---|
push | addFirst | offer | offerLast |
pop | removeFirst | poll | pollFirst |
peek | peekFirst | peek | peekFirst |
从操作特性上来看,栈和队列都是⼀种“操作受限”的线性表。栈的应用场景有很多,例如函数调⽤、括号匹配、表达式求值等。常见的表达式有:
- 前缀表达式,对应树的先序遍历,符合程序中调用函数的写法
- 后缀表达式,对应树的后序遍历,适合用栈模拟的最近相关性
- 中缀表达式,对应树的后序遍历,需要括号表示计算的优先级
刷题清单 | 备注 |
---|---|
20.有效的括号 | 每个右括号只与最邻近的左括号匹配 |
1047. 删除字符串中的所有相邻重复项 | 考虑用Deque/StringBuilder/char[] 模拟栈 |
155.最小栈 | 记录历史前缀最小值 |
150.逆波兰表达式求值 | 每个操作符只与最近两个操作数匹配 |
227.基本计算器 II | 操作符需要比对邻近历史操作符的优先级 |