代码随想录算法训练营第九天(字符串)| 232.用栈实现队列,225. 用队列实现栈
232. 用栈实现队列
大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。
题目链接/文章讲解/视频讲解:
看到题目的第一想法:
一个栈负责进栈,一个栈负责出栈
package com.second.day10;
import java.util.Stack;
public class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>(); //负责进栈
stackOut = new Stack<>(); //负责出栈
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
if(stackOut.isEmpty()) {
while(!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
int pop = stackOut.pop();
return pop;
}
public int peek() {
if(stackOut.isEmpty()) {
while(!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
int peek = stackOut.peek();
return peek;
}
public boolean empty() {
if(stackIn.isEmpty() && stackOut.isEmpty())
return true;
return false;
}
}
看完代码随想录之后的想法:
pop函数和peek函数有代码重复部分,可以进行代码精简。
自己实现过程中遇到哪些困难:
无
225. 用队列实现栈
可以大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。
建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解
题目链接/文章讲解/视频讲解:
看到题目的第一想法:
一个队列负责入,一个队列负责暂存
package com.second.day10;
import java.util.LinkedList;
import java.util.Queue;
public class MyStack {
Queue<Integer> queueIn;
Queue<Integer> queueOut;
public MyStack() {
queueIn = new LinkedList<>();
queueOut = new LinkedList<>();
}
public void push(int x) {
queueIn.offer(x);
}
public int pop() {
remove();
int pop = queueIn.poll();
return pop;
}
public int top() {
remove();
int top = queueIn.peek();
return top;
}
public boolean empty() {
if(queueIn.isEmpty() && queueOut.isEmpty()) {
return true;
}
return false;
}
//使queueIn只剩下一个元素
public void remove() {
if(queueIn.isEmpty()) {
while(!queueOut.isEmpty()) {
queueIn.offer(queueOut.poll());
}
}
int size = queueIn.size();
while(size > 1) {
queueOut.offer(queueIn.poll());
size--;
}
}
}
看完代码随想录之后的想法:
代码一样,真的厉害。
自己实现过程中遇到哪些困难:
无
今日收获,记录一下自己的学习时长:
今天的还算简单,一下子就写完了。
今天写了二个题: 232.用栈实现队列,225. 用队列实现栈
代码:1h
博客:30min
每一个成功者都有一个开始。勇于开始,才能找到成功的路。