Leetcode典型題解答和分析、歸納和彙總——T155(最小棧)

問題描述:

設計一個支持push,top,pop操作,並能在常數時間內檢索到最小元素的棧。

問題分析:

本題其實就是考察棧的基本操作:如入棧s.push(x),出棧s.pop(),查看棧頂元素值s.top()等,然後對於要查看的最小值,我們可以採用第二個最小值棧進行保存處理,每次入棧一個元素,我們就把最小的元素保存起來。

class MinStack {
public:
    stack<int> m_stack;
	stack<int> m_stack_min;
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
       m_stack.push(x);
	   if(m_stack_min.empty()||x<=m_stack_min.top())
	   {
		   m_stack_min.push(x);  //如果最小棧爲空,或者比最小棧棧頂元素還要小,則入棧,方便找最小值。
	   }
	   
    }
    
    void pop() {
		if(s_stack.top()==m_stack_min.top())
		{
			m_stack_min.pop();  //刪除棧頂的元素,注意如果原始棧s_stack與最小棧s_satack_min相同,要同時刪除掉
		}
		m_stack.pop();

    }
    
    int top() {
      return m_stack.top();
    }
    
    int getMin() {
       return m_stack_min.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

 

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