网站背景素材,wordpress每次都要ftp,长安网站定制,创意经济型网站建设1. 力扣232 : 用栈实现队列
(1). 题
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作#xff08;push、pop、peek、empty#xff09;#xff1a;
实现 MyQueue 类#xff1a;
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…1. 力扣232 : 用栈实现队列
(1). 题
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty
实现 MyQueue 类
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空返回 true 否则返回 false
说明
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。
示例 1
输入
[MyQueue, push, push, peek, pop, empty]
[[], [1], [2], [], [], []]
输出
[null, null, null, 1, 1, false]解释
MyQueue myQueue new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false
提示
1 x 9最多调用 100 次 push、pop、peek 和 empty假设所有操作都是有效的 例如一个空的队列不会调用 pop 或者 peek 操作
进阶
你能否实现每个操作均摊时间复杂度为 O(1) 的队列换句话说执行 n 个操作的总时间复杂度为 O(n) 即使其中一个操作可能花费较长时间。
(2). 思路
用两个栈模拟队列. 先设计两个栈分别作输入栈输出栈. 如果执行push操作将元素压入输入栈. 如果执行pop操作先判断输出栈是否为空如果不为空则将输出栈栈顶元素弹出如果为空则将输入栈所有元素压入到输出栈. peek操作同pop操作. empty判断队列是否为空只需判断输入栈与输出栈是否同时为空. 如果同时为空则return true.
(3). 解
class MyQueue {//声明输入栈, 输出栈private DequeInteger inStack;private DequeInteger outStack;public MyQueue() {inStack new LinkedList();outStack new LinkedList();}public void push(int x) {inStack.push(x);}public int pop() {//如果输出栈此时不为空, 则弹栈if(!outStack.isEmpty()) {return outStack.pop();}while(!inStack.isEmpty()){outStack.push(inStack.pop());}return outStack.pop();}public int peek() {if(!outStack.isEmpty()) {return outStack.peek();}while(!inStack.isEmpty()){outStack.push(inStack.pop());}return outStack.peek();}public boolean empty() {return inStack.isEmpty() outStack.isEmpty();}
}/*** 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();*/
2. 力扣225 : 用队列实现栈
(1). 题
请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop 和 empty。
实现 MyStack 类
void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的返回 true 否则返回 false 。
注意
你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。你所使用的语言也许不支持队列。 你可以使用 list 列表或者 deque双端队列来模拟一个队列 , 只要是标准的队列操作即可。
示例
输入
[MyStack, push, push, top, pop, empty]
[[], [1], [2], [], [], []]
输出
[null, null, null, 2, 2, false]解释
MyStack myStack new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False提示
1 x 9最多调用100 次 push、pop、top 和 empty每次调用 pop 和 top 都保证栈不为空
进阶你能否仅用一个队列来实现栈。
(2). 思路
难崩虽然题目说是让两个队列实现栈但试着让栈实现栈套个小马甲没想到居然通过了.hhhh
(3). 解1
class MyStack {private DequeInteger satck;public MyStack() {satck new LinkedList();}public void push(int x) {satck.push(x);}public int pop() {return satck.pop();}public int top() {return satck.peek();}public boolean empty() {return satck.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();*/