最小栈

最小栈

在这里插入图片描述
我们通过2个栈来保存入栈的数
其中第一个栈正常保存所有入栈的数
第二个栈就需要进行判断要入栈的元素和顶部的元素的大小关系
如果顶部的数大,则正常入栈
反之,则入栈一个顶部的数(原来的数不入栈)
当出栈的时候
2个栈都要出栈
计算顶部的数的时候,返回第一个栈的顶部元素即可
计算最小的数的时候,返回第二个栈的顶部元素

下面附上代码

class MinStack {public:    
/** initialize your data structure here. */    
MinStack() {}        
void push(int x)     
{        
 l1.push(x);        
 if(l2.empty())        
  {            
  l2.push(x);        
  }        
 else        
 {            
 int t=l2.top();            
 l2.push((x<t)?x:t);        
 }    
}        
void pop()     
{        
 l1.pop();        
 l2.pop();    
}        
int top()     
{        
 return l1.top();    
}        
int getMin()     
{       
  return l2.top();    
}
 private:    
  stack<int> l1;    
  stack<int> l2;
};
/** * Your MinStack object will be instantiated and called as such: 
* MinStack* obj = new MinStack(); 
* obj->push(x); * obj->pop(); 
* int param_3 = obj->top(); 
* int param_4 = obj->getMin(); */

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值