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

Posted ThePaK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 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.

题目链接

解题思路

创建两个栈,分别为数据栈 A 和辅助栈 B,栈 A 用于存储所有元素,栈 B 中存储栈 A 中所有 非严格降序(包含重复元素) 的元素,则栈 A 中的最小元素始终对应栈 B 的栈顶元素,即 min() 函数只需返回栈 B 的栈顶元素即可。

代码

class MinStack 
public:
    /** initialize your data structure here. */
    stack<int>s;
    stack<int>m;
    MinStack() 

    
    
    void push(int x) 
        s.push(x);
        if(m.empty())
        
            m.push(x);
        
        else if(x<=m.top())
        
            m.push(x);
        

    
    
    void pop() 
        if(s.top()==m.top())
        
            s.pop();
            m.pop();
        
        else
        
            s.pop();
        
        
    
    
    int top() 
        return s.top();
    
    
    int min() 
        return m.top();
    
;

/**
 * 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();
 */

剑指OFFER 包含min函数的栈

剑指OFFER 包含min函数的栈

手动实现栈,考查基本知识的掌握

class Solution {
public:
    static const int stack_size = 100000;
    int s[stack_size];
    int* mytop = s;
    
    void push(int value) {
        *mytop = value;
        mytop++;
    }
    void pop() {
        if(mytop == s)return;
        mytop--;
    }
    int top() {
        return *mytop;
    }
    int min() {
        int res = INT_MAX;
        for(int i=0;i<mytop-s;i++)
        {
            if(s[i]<res)res = s[i];
        }
        return res;
    }
};

以上是关于剑指 Offer 30. 包含min函数的栈的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer打卡30.包含min函数的栈

剑指Offer打卡30.包含min函数的栈

剑指 Offer 30. 包含min函数的栈 / 剑指 Offer 31. 栈的压入弹出序列

剑指Offer30包含min函数的栈

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

剑指 Offer 30. 包含 min 函数的栈,时间复杂度O(简单)