包含min函數的棧
阿新 • • 發佈:2019-04-04
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函數的棧