基础知识

使用ArrayDeque 实现栈和队列

stack push pop peek isEmpty() size()

queue offer poll peek isEmpty() size()

LeetCode 232.用栈实现队列

分析1.0

队列先进先出,栈先进后出,每次获得栈中的最后一个元素,需要借助两个栈,操作完成之后再将元素push回去。

设一个栈为stack,存放元素,另一个栈为tool,用于实现元素转置,就是来回倒腾

class MyQueue {
ArrayDeque stack, tool;
public MyQueue() {
this.stack = new ArrayDeque();
this.tool = new ArrayDeque();
} public void push(int x) {
stack.push(x);
} public int pop() {
int ans = -1;
while(!stack.isEmpty()){
tool.push(stack.pop());
}
if(!tool.isEmpty()){
ans = (int)tool.pop();
}
while(!tool.isEmpty()){
stack.push(tool.pop());
}
return ans;
} public int peek() {
int ans = -1;
while(!stack.isEmpty()){
tool.push(stack.pop());
}
if(!tool.isEmpty()){
ans = (int)tool.peek();
}
while(!tool.isEmpty()){
stack.push(tool.pop());
}
return ans;
} public boolean empty() {
return stack.isEmpty();
}
}

失误

Stack提前定义一下泛型

LeetCode 225. 用队列实现栈

分析1.0

队列,先进先出,队列分为队尾队头,要实现栈操作,pop时pop队尾,push时直接push就好,到的是队尾

要用一个队列实现栈,pop队头后再push进队尾,留下来最后一个元素即可,如何定位第一个或最后一个元素

class MyStack {

    ArrayDeque<Integer> list;

    public MyStack() {
this.list = new ArrayDeque();
} public void push(int x) {
list.offer(x);
} public int pop() {
int flag = list.peek();
int temp = 0;
while(true){
temp = list.poll();
if(list.isEmpty() || list.peek() == flag){
break;
}
list.offer(temp);
}
return temp;
} public int top() {
int flag = list.peek();
int temp = 0;
while(true){
temp = list.poll();
list.offer(temp);
if(list.peek() == flag){
break;
}
}
return temp;
} public boolean empty() {
return list.isEmpty();
}
}

总结

  1.   循环代码块中实现元素定位

常用变量名增量更新

size、val、ans、cnt、cur、pre、next、left、right、index、gap、tar、res、src、len、start、end、flag

代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈的更多相关文章

  1. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  2. 【算法训练营day7】LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和

    [算法训练营day7]LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和 LeetCode454. 四数相加I ...

  3. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  4. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  5. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  6. LeetCode 232. 用栈实现队列(Implement Queue using Stacks) 4

    232. 用栈实现队列 232. Implement Queue using Stacks 题目描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从 ...

  7. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  8. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  9. LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

    题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...

  10. Java实现 LeetCode 232 用栈实现队列

    232. 用栈实现队列 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返 ...

随机推荐

  1. 一定要用Photoshop?no!动手用Python做一个颜色提取器! ⛵

    作者:韩信子@ShowMeAI Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 计算机视觉实战系列:https://www.showmeai ...

  2. python 运算优先级

    python 运算优先级,请见下图

  3. python 实现RSA数字签名

    from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Cryp ...

  4. 实践GoF的23种设计模式:命令模式

    摘要:命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化.延迟执行.实现 Undo / Redo 操作等. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式 ...

  5. [数据分析与可视化] 数据绘图要点2-Y轴的开始与结束

    数据绘图要点2-Y轴的开始与结束 切割或不切割Y轴可能是数据可视化中最具争议的话题之一.基本上,主要问题在于 Y 轴是否应始终从零开始.数据可视化的目的是讲述一个故事,图形表达方式会对可视化讲述的故事 ...

  6. 题解CF893C Rumor

    思路 竟然朋友之间可以传递故事,那么,我们设两两有间接或直接的朋友关系的为一个友好集合,那么我们只要每一个友好集合买一次就好了. 那应该怎么买呢?由于题面让我们求的是[最少的价钱],那我们可以考虑每一 ...

  7. C Primer Plus (6.16) 編程練習

    /*C Primer Plus (6.15) 6*/ 1 #include<stdio.h> 2 int main() 3 { 4 int i,j; 5 for(int i=0;i< ...

  8. flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon'

    flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon' ...

  9. NG-Alain + Angular11使用ModalHelper实现简单版本弹框,代码超级少,记得模块要引用这个组件

    先看一下目录结构 --aa-item ----modal-compment ------modal-compment.component.html ------modal-compment.compo ...

  10. 创建型模式 - 建造者模式Builder

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 最近这个脑T---瘫----CSDN有毛病吧?我写这个都是涉及到广告了?谁家的广告? 谁给我钱了?审核策略设计者是什么NTR? ...