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

30 包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)

示例:

输入:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.

问题理解

这里要定义一个栈的功能是要有一个实现最小值的功能的接口,所以可以通过一个栈来进行管理,当然也可以用一个辅助栈来进行功能的实现。这里用一个栈在存储数据时,进行两次数据的存储,一个是之前最早的值,另一个是当前的要插入的值。

问题解决

这里特殊的地方是push和pop的时候,push时会将之前最小的值一并存储,pop时会将最小值和实际value一并取出。
代码如下所示:

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> min_stack;
    int min_num = INT_MAX;
    MinStack() {

    }
    
    //Use one stack to solve the problem.Every time add to stack,save the small num before and new value.
    void push(int x) {
        min_stack.push(min_num);
        if(x < min_num){
            min_num = x;
        }
        min_stack.push(x);
    }
    
    //Use double pop to keep new of min value and top value.
    void pop() {
        min_stack.pop();
        min_num = min_stack.top();
        min_stack.pop();
    }
    
    int top() {
        return min_stack.top();
    }
    
    //The min value saved in min_num;
    int min() {
        return min_num;
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->min();
 */
posted @   忠肝义胆-多隆  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示