leetcode_155题——Min Stack(栈)

题目如下:

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.

 

分析如下:

1 想到用两个stack来维护这个结构。1个stack用来正常进行stack的push pop等操作。另外1个stack用来维护min.每次对stack进行pop或者push时,也对min_stack进行相应操作。

2 第2个stack的大小是可以进行优化的。不一定每个min都要入栈min_stack,push的时候,只入栈比当前min小或者相等的值就可以了。pop的时候,比较待pop元素和min_stack的top的大小。如果待pop元素和min_stack top相等,则将min stack进行pop。

3 online judge做得真心好,如果用了两个栈但是没有空间优化,是没法ac的。

#include<iostream>

#include<stack>

using namespace std;



class MinStack {

public:

	void push(int x) 

	{

		normal_stack.push(x);

		if(min_stack.empty())

			min_stack.push(x);

		else

		{

			if(x<=min_stack.top())

				min_stack.push(x);

		}

	}



	void pop() 

	{

		int temp=normal_stack.top();

		if(temp==min_stack.top())

			min_stack.pop();

		normal_stack.pop();

	}



	int top() 

	{

		int result;

		result=normal_stack.top();

		return result;

	}



	int getMin()

	{

		int result;

		result=min_stack.top();

		return result;

	}

private:

	stack<int> normal_stack;

	stack<int> min_stack;

};



int main()

{



}

  

你可能感兴趣的:(LeetCode)