leetcode题目-最小栈和用两个栈实现队列
1.用两个栈实现队列
a栈用来存放加入的数
b栈用来存放要删除的数
当b栈存在数据时,就把top的元素pop掉
直到b栈中没有数据存放,再重新遍历a栈,把a的数据倒着遍历进b栈。也就是b栈存放着倒着的a栈数据,这样就可以防止重复。
以下是代码:
var CQueue = function() {this.addStack = [];this.deleteStack = [];
};/** * @param {number} value* @return {void}*/
CQueue.prototype.appendTail = function(value) {this.addStack.push(value);
};/*** @return {number}*/
CQueue.prototype.deleteHead = function() {if(!this.deleteStack.length) {while(this.addStack.length) {this.deleteStack.push(this.addStack.pop());}} return this.deleteStack.length? this.deleteStack.pop() : -1;
};/*** Your CQueue object will be instantiated and called as such:* var obj = new CQueue()* obj.appendTail(value)* var param_2 = obj.deleteHead()*/
2.最小栈:设置一个辅助栈,专门存放每一次push时候,整个数组的最小值。
/*** initialize your data structure here.*/
var MinStack = function() {this.findMinStack = [];this.saveStack = [];
};/** * @param {number} x* @return {void}*/
MinStack.prototype.push = function(x) {this.saveStack.push(x);if(this.findMinStack.length) {if(x < this.findMinStack[this.findMinStack.length - 1]) {this.findMinStack.push(x);} else {this.findMinStack.push( this.findMinStack[this.findMinStack.length - 1]);}} else {this.findMinStack.push(x);}console.log('this.findMinStack',this.findMinStack)
};/*** @return {void}*/
MinStack.prototype.pop = function() {this.saveStack.pop();this.findMinStack.pop();
};/*** @return {number}*/
MinStack.prototype.top = function() {return this.saveStack[this.saveStack.length - 1];
};/*** @return {number}*/
MinStack.prototype.min = function() {return this.findMinStack[this.findMinStack.length - 1];// console.log('this.findMinStack',this.findMinStack);
};/*** Your MinStack object will be instantiated and called as such:* var obj = new MinStack()* obj.push(x)* obj.pop()* var param_3 = obj.top()* var param_4 = obj.min()*/
leetcode题目-最小栈和用两个栈实现队列相关推荐
- Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)
用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...
- 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列
一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...
- 化栈为队(两个栈来实现一个队列)
实现一个MyQueue类,该类用两个栈来实现一个队列. 示例: MyQueue queue = new MyQueue();queue.push(1); queue.push(2); queue.pe ...
- php2个栈写一个队列,【数据结构】栈面试题--两个栈实现一个队列
首先我们必须清楚,栈先进后出,队列先进先出.这道他们各自的特点以后,我们用两个栈来实现1个队列. 下边给出图片: 下边给出代码: template class Queue { public: void ...
- leetcode剑指offe刷题-第一题-用两个栈实现队列
leetcode剑指offe刷题-第一题 文章目录 leetcode剑指offe刷题-第一题 前言 一.用两个栈实现队列 1.思路 2.代码如下 总结 前言 记录一下自己刷算法的路程. leetcod ...
- 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 一 . 概念! 首先要理解栈和队列的概念. 1. 栈:咱可以简单的把栈理解成装羽毛球的球桶.或者我们吃的 ...
- 一个数组实现两个栈(共享栈)
题目: 一个数组实现两个栈. 方法1: 下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上. 如上图所示的数组:若 ...
- 【C语言实现共享栈】关于【共享栈】,你知道多少,快来看看吧
目录 一 .共享栈的基本概念 1.定义 2.特点 二.共享栈的表示 三.共享栈的基本操作 1.共享栈的初始化操作 2.共享栈的判空操作 3.共享栈的进栈操作 0号栈进栈 1号栈进栈 4.共享栈的出栈操 ...
- 栈的顺序存储实现(顺序栈)
目录 1.初始化 2.判断栈是否为空 3.入栈 4.出栈 5.读取栈顶 6.top指针初始化为0的情况 7.共享栈 补充一个小知识点:n个不同元素进栈,那么出栈元素不同的排列的个数为 . 上述公式被 ...
最新文章
- Jmeter工具中参数化、正则表达式提取器、响应断言的实现
- Nginx的应用之动静分离
- Python 为了提升性能,竟运用了共享经济!赶紧看看!!
- 【转】Android之apk文件签名——keytool 和 jarsigner
- php中浮点数计算问题
- 人工智能“国家队”云从科技行人再识别达到96.6%,创世界纪录;知产链IPC与雷神展开合作,推出雷神通证
- 11-TensorFlow 基于ResNet的轴承故障诊断
- Maven镜像源汇总(含国内、国外)
- 华为HCNE(H3CNE) / HCSE(H3CSE)认证必看书籍
- Ubuntu安装google中文输入法
- MySQL数据库授权与索引
- HOOK技术四-插件中Activity启动实战
- 如何让好习惯成为你人生中的一部分
- 信安实验-RSA(备课)
- 非常详细易懂的法线贴图(Normal Mapping)
- C#连接SQL Server并查询数据
- [python爬虫之路day5]:实战之电影天堂2019精选电影爬取
- 高新技术企业申请后多久会出结果呢?
- 【博学谷学习记录】超强总结,用心分享丨前端开发:BootStrap框架基础用法
- docker中使用aspose word转pdf 乱码问题