20.包含min函数的栈

20. 包含min函数的栈

题目描述

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

思路

使用两个stack,一个为数据栈,另一个为辅助栈。数据栈用于存储所有数据,辅助栈用于存储最小值。
例子:
举个例子:

入栈的时候:首先往空的数据栈里压入数字3,显然现在3是最小值,我们也把最小值压入辅助栈。接下来往数据栈里压入数字4。由于4大于之前的最小值,因此我们只要入数据栈,不压入辅助栈。

出栈的时候:当数据栈和辅助栈的栈顶元素相同的时候,辅助栈的栈顶元素出栈。否则,数据栈的栈顶元素出栈。

获得栈顶元素的时候:直接返回数据栈的栈顶元素。

栈最小元素:直接返回辅助栈的栈顶元素。

代码实现



class Solution {
public:
    void push(int value) {
        Data.push(value);    //Data栈元素一律压入
        if (Min.empty())
        {
          Min.push(value);  // 仅对首个压入有用
        }
        if(Min.top() > value)
        {
            Min.push(value);             //辅助栈存入的永远是小于等于data栈的元素
        }

    }
    void pop() {
        if (Min.top() == Data.top() )
        {
            Min.pop();       //辅助栈的弹出,                                               
        }
         Data.pop();
    }
    int top() {

        return Data.top();
    }
    int min() {
        return Min.top();
    }

private:
    stack <int> Data;   //定义一个数据栈
    stack <int> Min;    // 定义一个辅助栈,压入最小值
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值