代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈
基础知识
使用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();
}
}
总结
- 循环代码块中实现元素定位
常用变量名增量更新
size、val、ans、cnt、cur、pre、next、left、right、index、gap、tar、res、src、len、start、end、flag
代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈的更多相关文章
- 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II
[算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...
- 【算法训练营day7】LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和
[算法训练营day7]LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和 LeetCode454. 四数相加I ...
- 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素
[算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
- 【算法题 14 LeetCode 147 链表的插入排序】
算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...
- LeetCode 232. 用栈实现队列(Implement Queue using Stacks) 4
232. 用栈实现队列 232. Implement Queue using Stacks 题目描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从 ...
- 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解
题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...
- Java实现 LeetCode 232 用栈实现队列
232. 用栈实现队列 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返 ...
随机推荐
- 使用VMware安装Linux(CentOS)操作系统
使用VMware安装CentOS 6.4 环境:Windows7 , VMware Workstation10, CentOS6.4 为什么选择CentOS ? 主流: 目前的Linux操作系统主要应 ...
- Java第一课Hello World
java第一课 Hello World 学习 新建文件夹放写的代码 新建.txt文件,并写入java 输出Hello World 的代码 public class Hello{ public ...
- 带你了解基于Ploto构建自动驾驶平台
摘要:华为云Solution as Code推出基于Ploto构建自动驾驶平台解决方案. 本文分享自华为云社区<基于Ploto构建自动驾驶平台>,作者:阿米托福 . 2022年6月15日, ...
- Pointers and Constants
Pointers and Constants char * const q = "abc"; // q is const *q = 'c'; // OK q++; //ERROR ...
- 痞子衡嵌入式:我被邀请做贸泽电子&与非网联合推出的《对话工程师》节目嘉宾
<对话工程师>是「贸泽电子」赞助.「与非网」制作的一档网络节目,自2022年11月起,邀请不同技术领域的资深工程师,聊聊开发过程中的经验感悟,栏目共 10 期,痞子衡有幸被邀请做了第 4 ...
- Day38:Lambda表达式
Lambda表达式 1.1 概述 Lambda是JDK8开始后的一种新语法形式. 作用:简化函数式匿名内部类的代码写法. 简化格式: /*部类被重写方法的参数)->{ 被重写方法的方法体代码 } ...
- Spring之后置处理器
Spring的后置处理器是Spring对外开发的重要扩展点,允许我们接入Bean的实例化流程中,以达到动态注册BeanDefinition.动态修改BeanDefinition.动态修改Bean的 ...
- adb devices出现offline解决方法
出现offline或者error: more than one device/emulator问题: 解决方法: 输入命令: adb kill-server adb start-server adb ...
- P1314 聪明的质监员(题解)
题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) ...
- linux挖矿处置
挖矿的类型 主动挖矿:用户在个人电脑或服务器使用挖矿程序进行CPU,GPU计算,获取虚拟货币. 被动挖矿:挖矿病毒通过系统漏洞,恶意程序,弱口令等方式入侵服务器,设备感染挖矿病毒后会开始挖掘虚拟货币. ...