代码随想录算法训练营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() – 返 ...
随机推荐
- 【sqoop】简介、原理、安装配置测试、导入导出案例、脚本打包、常见命令及参数介绍、常用命令举例
一.sqoop简介 用于在Hadoop(Hive)与传统的数据库(mysql.oracle...)之间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等 ...
- uniapp微信小程序 选择日期时间
一.根据需要点击选择时间日期,效果如下图: (1)新建一个dateTimePicker.js文件 function withData(param){ return param < 10 ? '0 ...
- 04-CURD
Insert @Test//测试插入 public void insertTest(){ User user = new User(); user.setName("wsk"); ...
- 4、PageHelper分页查询
1.MyBatis的分页方式: 逻辑分页与物理分页 1.逻辑分页:使用MyBatis自带的RowBounds进行分页,是一次性查询很多数据,然后再在结果中检索分页的数据.这样做弊端是需要消耗大量的内存 ...
- 解决多次重连rabbitMQ失败
项目中有用到rabbitMQ,但由于防火墙原因只有在SIT环境下才能连上rabbitMQ,在本地是无法连上rabbitMQ的.如下: 为了不影响调试,临时解决方法为禁止rabbitMQ打印日志.在lo ...
- [OpenCV实战]25 使用OpenCV进行泊松克隆
目录 1 Seamless Cloning实现 1.1 Seamless Cloning实例 1.2 正常克隆(NORMAL_CLONE)与混合克隆(MIXED_CLONE) 1.2.1 Normal ...
- 既然有MySQL了,为什么还要有MongoDB?
大家好,我是哪吒,最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦? 让我们一起,一探究竟,了解一下MongoDB的特点和基本用法 ...
- 多项式 I:拉格朗日插值与快速傅里叶变换
1. 复数和单位根 前置知识:弧度制,三角函数. 1.1 复数的引入 跳出实数域 \(\mathbb R\),我们定义 \(i ^ 2 = -1\),即 \(i = \sqrt {-1}\),并在此基 ...
- 写一个 Markdown 博客客户端
这个"伪需求"是最近才想到的. 关于文章管理的想法,说来话长.我最初是在 CSDN 写技术文章,就用网页上的编辑器.后来在 CppBlog 写,用上了 Windows Live W ...
- SPOJ PHONELST - Phone List | UVA11362 Phone List | LibreOJ10049. 「一本通 2.3 例 1」Phone List
简要题意 \(t\) 组数据,每组数据给定 \(n\) 个长度不超过 \(10\) 的数字串,判断是否有两个字符串 \(A\) 和 \(B\),满足 \(A\) 是 \(B\) 的前缀,若有,输出 N ...