码迷,mamicode.com
首页 > 其他好文 > 详细

包含min函数的栈

时间:2019-08-10 21:16:12      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ret   tac   最小栈   private   pop   操作   push   函数   因此   

【问题】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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函数的栈

标签:ret   tac   最小栈   private   pop   操作   push   函数   因此   

原文地址:https://www.cnblogs.com/zhudingtop/p/11332858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!