Min Stack

這道題目思路就一個,就是如何存儲最小元素這一問題。

題目鏈接: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;
    }
};

效率:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章