1、包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路
用一个栈st1装载数据,利用一个辅助栈st2记录此时st1栈中的最小数据,每次元素入栈st1,和此时st2中的栈顶元素比较,若入栈元素比st2栈顶元素小或等于栈顶元素,则入栈st1同时入栈st2,;否则只入栈st1。st1出栈时,也同st2栈顶元素比较,若元素相同则同时出栈,否则st2不出栈。这样能够保证st2栈顶元素是当前st1中的最小元素。
代码(c++)
class Solution {
public:
stack<int> st1,st2;
void push(int value) {
st1.push(value);
if(st2.empty()) st2.push(value);
else{
if(value<=st2.top()){
st2.push(value);
}
}