包含min函数的栈

Posted zhudingtop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含min函数的栈相关的知识,希望对你有一定的参考价值。

【问题】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

【思路】

由于这个题目要求在O(1)找到最小值,首先我们先来看下数据在栈中如何储存,假设有一些数据这样依次入栈:6,4,3,5,4,此时最小值为3,但随着push和pop操作,其最小值都会更新,我们使用另外一个栈来储存每个阶段的最小值!怎么储存呢?

操作栈:6,4,3,5,4
最小栈:6,4,3,空,空

当压入一个数时,我们判断这个数是否小于等于栈顶,若是,此时最小值更新,我们将这个数压入到最小栈中!因此最小栈的栈顶储存的是每个操作(push或pop)后的栈的最小值

当弹出时,检查是否与最小栈栈顶相同,换句话说是否是操作栈的最小值,若是,则最小栈也需要弹出!

 1class Solution 
 2private:
 3    stack<int> sta;
 4    stack<int> minSta;   // 辅助栈
 5public:
 6    void push(int value) 
 7        sta.push(value);
 8        if(minSta.empty())
 9            minSta.push(value);
10        else if(value <= minSta.top())
11            minSta.push(value);
12        
13    
14    void pop()
15        if(sta.top() == minSta.top())
16            minSta.pop();   // 但sta弹出时,如果和minSta相同,那么minSta也弹出
17        
18        sta.pop();
19    
20    int top() 
21        return sta.top();
22    
23    int min() 
24        return minSta.top();
25    
26;

 

以上是关于包含min函数的栈的主要内容,如果未能解决你的问题,请参考以下文章

包含min函数的栈

包含min函数的栈-剑指Offer

包含min函数的栈——21

剑指 Offer 30. 包含min函数的栈

包含min函数的栈

(程序员面试题精选(02))-设计包含min函数的栈