NC76 用两个栈实现队列
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: n\le1000n≤1000
要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)
示例1
输入:
1 | ["PSH1","PSH2","POP","POP"] |
返回值:
1 | 1,2 |
说明:
1 | "PSH1":代表将1插入队列尾部 |
示例2
输入:
1 | ["PSH2","POP","PSH1","POP"] |
返回值:
1 | 2,1 |
思路:
- push操作就直接往stack1中push
- pop操作需要分类一下:如果stack2为空,那么需要将stack1中的数据全部转移到stack2中,然后在对stack2进行pop,如果stack2不为空,直接pop就ok。
解答:
1 | import java.util.Stack; |
NC52 有效括号序列
描述
给出一个仅包含字符’(‘,’)’,’{‘,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,”()”和”()[]{}”都是合法的括号序列,但”(]”和”([)]”不合法。
数据范围:字符串长度 0\le n \le 100000≤n≤10000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
示例1
输入:
1 | "[" |
返回值:
1 | false |
示例2
输入:
1 | "[]" |
返回值:
1 | true |
思路:
- 先进后出的话hashMap不好解决
- 利用栈的先后进先出
- 每次匹配左半边括号push右半边
- 匹配右半边括号pop
- 为空或者匹配不等于最近push进去的值则退出
解答:
1 | import java.util.*; |