Leetcode 155. 最小栈 简单

155. 最小栈

题目:

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

思路1:

用一个额外的栈保存每次push时的最小值。

如果val小于min,则将val放入最小栈,否则放入min

class MinStack {
public:
    MinStack() {
        stkmin.push(INT_MAX);
    }
    
    void push(int val) {
        stk.push(val);
        if(val<stkmin.top()){
            stkmin.push(val);
        }else{
            stkmin.push(stkmin.top());
        }
    }
    
    void pop() {
        stk.pop();
        stkmin.pop();
    }
    
    int top() {
        return stk.top();
    }
    
    int getMin() {
        return stkmin.top();
    }
    stack<int> stk;
    stack<int> stkmin;

};

思路2:

不使用额外空间的方法,就是当min_val需要更新(也就是val<=min_val时),先将当前的min_val放入栈中,更新min_val=val,然后将val放入栈

pop时比较top与min_val,如果相等,意味着min_val需要更新

 

class MinStack {
public:
    MinStack() {
        min_val=INT_MAX;
    }
    
    void push(int val) {
        if(val<=min_val){
            stk.push(min_val);
            min_val=val;
        }
        stk.push(val);
    }
    
    void pop() {
        int num=stk.top();
        stk.pop();
        if(num==min_val){
            min_val=stk.top();
            stk.pop();
        }
    }
    
    int top() {
        return stk.top();
    }
    
    int getMin() {
        return min_val;
    }
    int min_val;
    stack<int> stk;
};

 

posted @ 2022-03-16 20:47  鸭子船长  阅读(38)  评论(0编辑  收藏  举报