本文是【常用算法思路分析系列】的第三篇,分析栈和队列相关的高频题目。本文分析:1、可查询最值的栈;2、用两个栈实现队列的功能;3、反转栈中元素;4、排序栈中元素;5、滑动窗口问题。
本系列前两篇导航:
【常用算法思路分析系列】排序高频题集
【常用算法思路分析系列】字符串高频题集
1、可查询最值的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。...
分类:
编程语言 时间:
2016-05-21 11:47:49
阅读次数:
252
剑指offer第七题:利用两个栈实现队列 扩展:利用两个队列实现栈 ...
分类:
其他好文 时间:
2016-05-18 21:44:19
阅读次数:
163
用两个栈实现一个队列
1、线性表分为:顺序表和链表。
栈:只允许在尾上(即是栈顶)进行插入与删除。
队列:它是在队尾插入,队头删除。
2、栈选数组(即顺序表)结构时(比选链表结构更好):因为选数组结构可以进行size++与size--,而且效率高。
栈选链表结构:
3、队列选数..
分类:
其他好文 时间:
2016-05-15 20:09:11
阅读次数:
147
思路:栈s1和栈s2,s1用来Push数据,s2用来Pop数据入队:数据直接压入栈s1中出队:若s2为空,则把s1中除过最后一个压入的元素全部移入s2中,然后弹出s1的栈顶元素若s2不为空,直接弹出s2的栈顶元素#define_CRT_SECURE_NO_WARNINGS1#include<iostream>#include<stack&g..
分类:
其他好文 时间:
2016-05-15 19:59:30
阅读次数:
210
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
1、用两个栈。2、用迭代器。3、用其他辅助集合类...
分类:
其他好文 时间:
2016-05-14 11:30:07
阅读次数:
177
如何用O(1)的时间复杂度求栈中最小元素解题思路:
我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。思路如下:如果当前入栈的元素比原来栈中的最小值还小,则把这个值压入保存最小元素的栈中;在出栈时,如果当前入栈的元素恰好为当前栈中的最小值,保存最小值的栈顶元素也出栈,使得当前最小值变为其入栈之前的那个最小值。
实现代码如下:pa...
分类:
编程语言 时间:
2016-05-13 03:06:07
阅读次数:
162
1.用两个栈实现队列
分析:队列的特点是“先进先出”,而栈的特点是“后进先出”,入队列时让所有的元素进到stack1中,出队列时先判断stack2是否为空,不为空直接pop即可,若为空,将stack1中所有的元素“倒入”stack2中,这样就用两个栈实现了队列。
实现代码:
class Solution
{
public:
void push(int node) {
...
分类:
其他好文 时间:
2016-05-12 16:28:22
阅读次数:
149
用两个栈实现一个队列,并实现两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。栈的特点是“先进后出,后进先出”,而队列的特点是“先进先出,后进后出”,因此可以想到只用一个栈是无法完成的,所以会需要两个栈,先将输入的数据都..
分类:
其他好文 时间:
2016-04-28 12:36:57
阅读次数:
250
方法一:入队时,将元素压入s1。出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。方法二:入队时,先判断s1是否为空,如不为空,说明所有元素都在s1,此时将入队元素直接压入s1;如为空,要将s2的元素逐..
分类:
其他好文 时间:
2016-04-22 01:32:27
阅读次数:
195