今天是第9天刷leetcode,立个flag.
算法挑战链接
232. 用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/description/
第一想法
题目理解:用栈实现队列,栈的特性是先进后出,队列的特性是先进先出。如果单纯使用栈去实现队列是不理智的。那如果我是两个栈,一个栈先进后出,在叠加一次,就可以实现先进先出了。
两个栈的操作相对来说比较简单,会定义一个输出和输入栈,输入的操作在输入栈中操作,输出的操作在输出栈中操作,如果输出栈为空,会去获取输入栈的值作为输出栈的值输出。代码如下
class MyQueue {
//设计两个栈,一个输入栈,一个输出栈
//输入栈:只要是输入的就在输入栈里面操作
//输出栈:只要是输出的就在输出栈里面操作,如果输出栈为空,则将输入栈的东西放入到输出栈中
private Stack<Integer> pushStack;
private Stack<Integer> popStack;
private int stackSize;
public MyQueue() {
pushStack = new Stack<>();
popStack = new Stack<>();
stackSize = 0;
}
//将元素 x 推到队列的末尾 -- 属于输入操作
public void push(int x) {
pushStack.push(x);
stackSize++;
}
//从队列的开头移除并返回元素 -- 属于输出操作
public int pop() {
if (popStack.isEmpty()){
//将输入栈的 全部 值放入到输出栈中
while (!pushStack.empty()){
popStack.push(pushStack.pop());
}
}
if (!popStack.empty()) {
stackSize--;
return popStack.pop();
}
return -1;
}
public int peek() {
if (popStack.isEmpty()){
//将输入栈的 全部 值放入到输出栈中
while (!pushStack.empty()){
popStack.push(pushStack.pop());
}
}
if (!popStack.empty()) {
return popStack.peek();
}
return -1;
}
public boolean empty() {
return stackSize==0;
}
}
看完代码随想录之后的想法
一致的想法
实现过程中遇到哪些困难
栈的操作不熟练,在写代码的时候需要去查看api来解决
今日收获
了解了java的另一个结构 stack