学习目标:
每天复习代码随想录上的题目1-2道算法(时间充足可以继续)
今日碎碎念:
1)双非本真难受...
力扣刷题
算法
力扣232:232. 用栈实现队列
class MyQueue {
//因为是用栈来实现队列,因此,我们需要两个栈
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();//负责进栈
stackOut = new Stack<>();//负责出栈
}
//将元素 x 推到队列的末尾
public void push(int x) {
stackIn.push(x);
}
//从队列的开头移除并返回元素
public int pop() {
dumpstackIn();
return stackOut.pop();
}
// 返回队列开头的元素:我们得将in栈里面的元素倒过来,即达到取出栈最里面的元素
public int peek() {
dumpstackIn();
return stackOut.peek();
}
//如果队列为空,返回 true ;否则,返回 false
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
// 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
private void dumpstackIn(){
//不为空,表示我们可以继续取
if(!stackOut.isEmpty()) return;
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
/**
* 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:225. 用队列实现栈
class MyStack {
Deque<Integer> que;
public MyStack() {
que = new ArrayDeque<>();
}
//将元素 x 压入栈顶。
public void push(int x) {
//对于Deque我们将他放入最后
que.addLast(x);
}
//移除并返回栈顶元素:在实现弹栈的时候只需要将尾元素重新添加到头即可,即一个循环队列
public int pop() {
int size = que.size();
size--;
while(size-- >0){
//添加
que.addLast(que.peekFirst());
//弹栈
que.pollFirst();
}
return que.pollFirst();
}
//返回栈顶元素。
public int top() {
//简单的返回最后
return que.peekLast();
}
//如果栈是空的,返回 true ;否则,返回 false
public boolean empty() {
return que.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();
*/