当先锋百科网

首页 1 2 3 4 5 6 7

问题描述:

设计一个支持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();
 */