刷題筆記(十七)——包含min函數的棧

刷題筆記(十七)——包含min函數的棧

一直在忙着復現論文,好久不刷題了,論文筆記也有幾篇沒更,近期補上~

題目描述

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。

注意:保證測試中不會當棧爲空的時候,對棧調用pop()或者min()或者top()方法。

思路:

在棧中加入一個可以輸出當前棧中最小的元素函數

可以藉助另一棧來存放當前棧中最小的元素,棧1進行push操作時,若該元素小於等於棧2中棧頂元素,則棧2也執行push操作。棧1進行pop操作時,若棧1的棧頂元素即要pop的元素等於棧2 中的棧頂元素,則棧2也執行pop操作,否則,棧2不進行pop操作。

則棧1中的最小元素即爲棧2的棧頂元素。

代碼

class Solution {
public:
    stack<int> s1;
    stack<int> s2;
    void push(int value) {
        s1.push(value);
        if(s2.empty())
            s2.push(value);
        else if(s2.top()>=value)//注意等號
            s2.push(value);
    }
    void pop() {
        if(s1.top()==s2.top())
        {
            s1.pop();
            s2.pop();
        }
        else
            s1.pop();
    }
    int top() {
        return s1.top();
    }
    int min() {
        return s2.top();
    }
};

 

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