剑指offer题目20:包含min函数的栈

题目描述

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

解答思路

遇到这种问题,我的大脑很容易就短路了,因为我想不起来这种题目的前提肯定是空间换取时间的。。也就是肯定是要用额外变量来存储的。

一般人想到的方法肯定是使用一个minNumber来存储最小值的(我比一般人还要渣...),但是问题在于如果栈pop了最小值出来之后,栈中最小值就不是原来的值了,而是次最小值,因此我们还需要额外的空间来存储次最小值。。用到的是栈来存储次最小值。

每次push的时候判断一下是否比原来的最小值要小,是的话则变成最小值,之后的push操作都会添加最小值到最小值栈里面。。pop的时候也是除了两个栈都要pop。。

实现代码

class Solution {
public:
    stack<int> minStack;
    stack<int> normalStack;
    int minNum;

    void push(int value) {
        if(normalStack.empty()) {
            minNum = value;
        } else if(value < minNum) {
            minNum = value;
        }
        normalStack.push(value);
        minStack.push(minNum);
    }

    void pop() {
        normalStack.pop();
        minStack.pop();
    }

    int top() {
        return normalStack.top();
    }

    int min() {
        return minStack.top();
    }
};
posted @ 2019-04-02 09:51  {-)大傻逼  阅读(139)  评论(0)    收藏  举报
欢迎转载,转载请注明本文地址。