155. 最小栈

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

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。

//建立两个栈,size不一样
class MinStack {
private:
    /** initialize your data structure here. */
    stack<int> s1;
    stack<int> s2;
public:   
    void push(int x) {
        s1.push(x);
        if (s2.empty() || x<=getMin()) s2.push(x);
    }
    
    void pop() {
        if (s1.top()==getMin()) s2.pop();
        s1.pop();   
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return s2.top();
    }
};
//只有一个栈
class MinStack {
private:
    /** initialize your data structure here. */
    stack<int> s1;
    int min=INT_MAX;
public:   
    void push(int x) {
        if (x<=min) {//当前输入小于等于min时,多压一次min
            s1.push(min);
            min=x;
        }
        s1.push(x);
    }
    
    void pop() {
        int temp=s1.top();s1.pop();
        if (temp==min) {//当前top=min时,多弹一次上一次保存的min
            min=s1.top();
            s1.pop();
        }
    }
    int top() {
        return s1.top();
    }
    int getMin() {
        return min;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 6,897评论 0 3
  • 155. 最小栈 描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 pus...
    GoMomi阅读 1,482评论 0 0
  • LeetCode 155. Min Stack设计一个栈,支持如下操作,这些操作的算法复杂度需要是常数级,O(1)...
    徐凯_xp阅读 4,997评论 0 0
  • 你的孤独呢? 呆在风里不愿走开的目光, 埋在云上不会发芽的思想; 你的落寞呢? 漾在杯里难以下咽的苦楚, 潜在他心...
    Nomol阅读 2,312评论 0 0
  • 每日一文,今天已经是第五天,在此之前,我从来没有想过我会这样,我能做到这样。 小的时候,我爱看书,不识字的时候看小...
    陈小妞妞阅读 1,670评论 0 1