用两个栈实现队列
栈
题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
示例 2:
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
提示:
1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用
Related Topics
栈
设计
队列
👍 746
👎 0
class CQueue {
public CQueue() {
}
public void appendTail(int value) {
}
public int deleteHead() {
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
思路
- 初始化两个栈,一个顺,一个逆
- 添加时,把逆的转化成顺的进行添加
- 删除时,把顺的转化成逆的进行删除
实现
import java.util.Stack;
//leetcode submit region begin(Prohibit modification and deletion)
public class CQueue {
private Stack<Integer> ascStack;
private Stack<Integer> descStack;
public CQueue() {
ascStack = new Stack<>();
descStack = new Stack<>();
}
public void appendTail(int value) {
convert(descStack,ascStack);
ascStack.push(value);
}
public int deleteHead() {
convert(ascStack,descStack);
if (descStack.empty()) return -1;
return descStack.pop();
}
private void convert(Stack<Integer> origin,Stack<Integer> target){
while (!origin.empty()){
target.push(origin.pop());
}
}
}
结果
解答成功:
执行耗时:640 ms,击败了10.24% 的Java用户
内存消耗:52.3 MB,击败了14.02% 的Java用户
思路
- 两个栈,一个入,一个出
- 入直接添加即可,出的时候,需要判断出的栈是否为空,为空需要由入转出
实现
public class CQueue {
Stack<Integer> ascStack;
Stack<Integer> descStack;
public CQueue() {
ascStack = new Stack<>();
descStack = new Stack<>();
}
public void appendTail(int value) {
ascStack.push(value);
}
public int deleteHead() {
if (descStack.empty() && !ascStack.empty()){
convert(ascStack,descStack);
}
if (descStack.empty()) return -1;
return descStack.pop();
}
private void convert(Stack<Integer> origin,Stack<Integer> target){
while (!origin.empty()){
target.push(origin.pop());
}
}
}
结果
解答成功:
执行耗时:59 ms,击败了37.83% 的Java用户
内存消耗:52.5 MB,击败了7.08% 的Java用户
分析
没有达到超过80%,有待优化