题解 | 包含min函数的栈

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

class Solution {
  public:
    void push(int value) {
        s1.push(value);
        if (s2.empty() || value < s2.top())  s2.push(value);
        else    s2.push(s2.top());
    }
    void pop() {
        s1.pop();
        s2.pop();
    }
    int top() {
        return s1.top();
    }
    int min() {
        return s2.top();
    }
  private:
    stack<int> s1, s2;
};

和栈内最小的比较,比它小就入栈,否则在此刻最小的还是原来那个,记录每一个时刻的最小值(按顺序压入,也会按顺序弹出)

所以我们需要一个当前时刻最小值栈和储存所有元素的基础栈。每次基础栈入栈时,时刻最小栈比较上一个时刻的最小值和基础栈入栈值,如果更小就说明这一个时刻产生了更小的,把它压入,否则依然压入原来的,表示这个时刻最小的还是它。

这样在弹出时也不影响,因为保存的时刻是基础栈内的压入顺序,已经出去的元素不会影响在它之前进入的时刻的最小值。

全部评论

相关推荐

uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务