leetcode 最小栈

Problem describe:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
解法:
栈基本操作没什么太大问题,主要就是常数时间内找出栈中最小的元素,这需要我们在出栈和入栈的时候维护一个最小值,以便于在常数时间内给出最小值,于是我们用了两个栈,一个用于存储数据,另一个用于存储最小值。

class Minstack{
	private:
		stack<int> s1;
		stack<int> s2;
	public:
		void push(int x){
		s1.push(x);
		if(s2.empty||x<=getMin()) 
		s2.push(x);
		}
		void pop(){
		if(s1.top()== getMin()) 
		s2.pop();
		s1.pop();
		}
		int top(){
		return s1.top();
		}
		int getMin() {
		return s2.top();
		}
}

猜你喜欢

转载自blog.csdn.net/shine10076/article/details/83065270