Min Stack

来源:互联网 发布:dota1深渊领主技能数据 编辑:程序博客网 时间:2024/05/01 00:26

这道题目思路就一个,就是如何存储最小元素这一问题。

题目链接:https://oj.leetcode.com/problems/min-stack/


算法描述:

1.数值栈:cowboyStack, 最小栈:cowboyMiniStack

2.入栈x时,如果cowboyStack是空的,则将x分别雅茹cowboyStack、cowboyMiniStack中

3.入栈x时,如果cowboyStack不是空的,比较x和cowboyMiniStack的栈顶,如果x小于cowboyMiniStack的栈顶元素,则x压入cowboyMiniStack

4.出栈时,如果cowboyStack栈顶和cowboyMiniStack栈顶元素相同,则cowboyStack栈顶出栈的同时,cowboyMiniStack的栈顶元素也出栈。


代码:

class MinStack {
public:
    stack<int> cowboyStack;
    stack<int> cowboyMiniStack;
public:
    void push(int x) {
        cowboyStack.push(x);
        if (cowboyMiniStack.size()==0) {
            cowboyMiniStack.push(x);
        }else if(x<=cowboyMiniStack.top()){
            cowboyMiniStack.push(x);
        }
    }
    
    void pop() {
        if (cowboyStack.size()<=0) {
            return;
        }
        //pop miniStack
        if (cowboyMiniStack.top() == cowboyStack.top()) {
            cowboyMiniStack.pop();
        }
        //pop stack
        cowboyStack.pop();
    }
    
    int top() {
        //stack's size is larger than zero
        if (cowboyStack.size()>0) {
            return cowboyStack.top();
        }
        //stack is empty
        return -1;
    }
    
    int getMin() {
        //stack's size is larger than zero
        if (cowboyMiniStack.size()>0) {
            return cowboyMiniStack.top();
        }
        //stack is empty
        return -1;
    }
};

效率:


0 0
原创粉丝点击