1. 程式人生 > >包含min函數的棧

包含min函數的棧

highlight 包含min函數的棧 同時 oid 浪費時間 nbsp else value scribe

題目描述

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間復雜度應為O(1))。 解題思路: 思路一:用一個vector來模擬棧,同時使用一個vmin來記錄當前的最小值,不過當pop操作的時候,就需要重新遍歷一遍vector中剩余的元素了,比較浪費時間。 思路二:使用兩個stack、stack2來分別存放真實的棧數據和最小值。當入棧時,stack正常入棧,stack2判斷當前入棧元素是否小於等於stack2棧頂元素,如果是就入棧stack2,否則不入stack2;在出棧時,如果stack棧頂元素等於stack2棧頂元素,則兩個都出棧,否則只有stack出棧。(優秀的思路)
class Solution {
public:
    stack<int> stk, stk2;
    void push(int value) {
        stk.push(value);
        if(stk2.empty() || stk2.top() >= value){
            stk2.push(value);
        }
    }
    void pop() {
        if(stk.top() == stk2.top()){
            stk.pop();
            stk2.pop();
        }else{
            stk.pop();
        }
    }
    int top() {
        return stk.top();
    }
    int min() {
        return stk2.top();
    }
};

  

包含min函數的棧