前言
复习栈和队列原理,熟悉Deque操作
232.用栈实现队列
题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
直接使用双端队列当栈
class MyQueue {
Deque<Integer> stackin;
Deque<Integer> stackout;
public MyQueue() {
stackin = new ArrayDeque<>();
stackout = new ArrayDeque<>();
}
public void push(int x) {
stackin.offerFirst(x);
}
public int pop() {
if(!stackout.isEmpty()) {
return stackout.pollFirst();
}else {
while(!stackin.isEmpty()) {
stackout.offerFirst(stackin.pollFirst());
}
return stackout.pollFirst();
}
}
public int peek() {
if(!stackout.isEmpty()) {
return stackout.peekFirst();
}else {
while(!stackin.isEmpty()) {
stackout.offerFirst(stackin.pollFirst());
}
return stackout.peekFirst();
}
}
public boolean empty() {
if(stackin.isEmpty() && stackout.isEmpty()) {
return true;
}else return false;
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
225.用队列实现栈
题目链接:https://leetcode.cn/problems/implement-stack-using-queues/
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
双端队列
class MyStack {
Deque<Integer> deque;
public MyStack() {
deque = new ArrayDeque<>();
}
public void push(int x) {
deque.offerFirst(x);
}
public int pop() {
return deque.pollFirst();
}
public int top() {
return deque.peekFirst();
}
public boolean empty() {
return deque.isEmpty();
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/
文章详细介绍了如何使用栈和队列来实现Deque的基本操作,如push、pop、peek和empty。提供了两种实现方式,一种是用栈实现队列,另一种是用队列实现栈,这两种方法都利用了Java中的ArrayDeque。在LeetCode上有相应的题目进行实践。
320

被折叠的 条评论
为什么被折叠?



