包含min函数的栈
- 参与人数:1489时间限制:1秒空间限制:32768K
- 通过比例:32.05%
- 最佳记录:0 ms|0K(来自 冰封七大洲)
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
我觉得这一类型的题,最关键的是,搞清楚题目要我们怎么去实现函数,对于这种模拟题,题意的理解和思路一样重要,我一开始就没看懂。
面试的时候不清楚的题目意思,一定要问清楚才可以! 这题的意思是这个min栈可以输出当前栈内元素的最小值,那么我一开始想到的是优先队列(那个时候题目没理解),然后发现错了,后来想到用双栈来存!
一个存原始的栈 yuan;另一个存当前栈内最小的元素,保证两个栈的大小相等,那么当一个pop()的时候,另一个栈也同样pop();
测试样例:6 3 2 1 1 1 1
6 6 8 4 2 3 3
#include<stdio.h>
#include<stack>
using namespace std;
class Solution {
public:
stack<int> yuan;
stack<int> y_min;
void push(int value) {
if(y_min.empty()) y_min.push(value);
else
{
int tmp=y_min.top();
if(tmp>=value) y_min.push(value);
else y_min.push(tmp);
}
yuan.push(value);
}
void pop() {
if(!yuan.empty())yuan.pop();
if(!y_min.empty())y_min.pop();
}
int top() {
if(!yuan.empty())return yuan.top();
}
int min() {
if(!y_min.empty())return y_min.top();
}
};
int main()
{
int n;
Solution so;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
int tt;
scanf("%d",&tt);
so.push(tt);
}
for(int i=0;i<n;i++)
{
printf("%d\n",so.min());
so.pop();
}
}
}