题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
A:因为包含了入栈和出栈的操作,存储最小数的变量不能单单只是一个int的变量,应该用一个辅助栈来存储
所以创建数据站存储入栈的数据,创建最小数栈存储最小数
入栈:数据栈入栈,若最小栈为空 || value小于最小栈的顶元素,则把value入栈,否则再入一次栈顶元素
出栈:如果栈有元素,则出栈
取栈顶:返回数据栈栈顶
取最小值:返回最小值栈栈顶
class Solution {
public:
void push(int value)
{
s_data.push(value);
if((s_min.empty() == true) || (value < s_min.top()))
{
s_min.push(value);
}
else
{
s_min.push(s_min.top());
}
}
void pop()
{
if(s_data.top() > 0 && s_min.top() > 0)
{
s_min.pop();
s_data.pop();
}
}
int top()
{
return s_data.top();
}
int min()
{
return s_min.top();
}
private:
stack<int> s_data;
stack<int> s_min;
};

相关题目:
最小栈:实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1)
获取n维数组的最大深度:输入参数为字符串型的n维数组,数组的每一项值为数组 或 int型数字。请实现一个函数,可以获取列表嵌套列表的最大深度为多少。
中缀表达式转后缀表达式:将中缀表达式转为后缀表达式,输入 a+b*c/d-a+f/b 输出 abc*d/+a-fb/+
原文:https://www.cnblogs.com/xiexinbei0318/p/11432619.html