【leetCode】使用两个栈搞一个队列day05
时间:2022-07-23
本文章向大家介绍【leetCode】使用两个栈搞一个队列day05,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 提示: 1 <= values <= 10000 最多会对 appendTail、deleteHead 进行 10000 次调用
解题思路
- 栈的特性先进后出。队列的特性先进先出。
- 但是题目中只是需要写一个删除队列的头部和添加元素的方法,所以在这里,我们可以偷工减料了啊。
- add的时候将这个数据直接add,然后再记录一下存入的元素数量
- 然后删除的时候,删除的是头部,所以在这里我们得分清楚队列的头部在哪里。这个搞清楚了。那就好办了,那就把另一个栈的数据看有没有,如果有就弹栈,没有就进行循环把压入的栈放入另一个栈中。
- 然后将这个栈弹掉。就OK了。 (这个过程也是出队)
源码
class CQueue {
private Stack<Integer> pushSta;//命名有点问题
private Stack<Integer> deleteSta;
int size = 0;
public CQueue() {
this.pushSta = new Stack<Integer>();
this.deleteSta = new Stack<Integer>();
}
public void appendTail(int value) {
pushSta.push(value);
size = size +1 ;
}
public Integer deleteHead() {
if(size == 0 ){
return -1;
}
if(deleteSta.isEmpty()){
while(!pushSta.isEmpty()){
deleteSta.push(pushSta.pop());
}
}
Integer item = deleteSta.pop();
size = size -1 ;
return item;
}
}
原题链接
- https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/
- linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析
- linux学习第六十五篇:for循环,while循环, break跳出循环,continue结束本次循环
- linux学习第六十四篇:Shell脚本中的逻辑判断,文件目录属性判断, if特殊用法,case判断
- linux学习第六十三篇:Shell脚本介绍,Shell脚本结构和执行,date命令用法,Shell脚本中的变量
- 熔断Hystrix使用尝鲜
- 报警系统QuickAlarm之默认报警规则扩展
- PHP 面试知识梳理
- 报警系统QuickAlarm使用手册
- OpenDaylight Carbon二次开发实用指南
- 报警系统QuickAlarm之频率统计及接口封装
- 如何使用Sentry管理Hive外部表权限
- 报警系统QuickAlarm之报警规则解析
- 报警系统QuickAlarm之报警规则的设定与加载
- 报警系统QuickAlarm之报警执行器的设计与实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于url传值的问题—encodeURIComponent
- Markdown 调整图片位置与大小
- 展开与折叠菜单动画
- Vue 中使用Pug
- curl在raw.githubusercontent.com下载文件时出现无法链接问题
- linux查看端口进程信息—lsof工具
- vscode配置:双击选中连字符
- 实现简单登陆注册功能流程分析
- centos系统中yum安装应用出现doesn't have enough cached
- Mac os上显示与隐藏文件
- windows启动tomcat闪退,乱码问题解决
- Homebrew的安装
- 小程序轮播中嵌入视频-关于swiper、video组件与block标签
- Pocket重建您的专注力
- redux-thunk