最小栈

本文介绍了一种使用两个栈来实现最小值栈的方法,其中一个栈用于存储所有入栈元素,另一个栈则用于跟踪并保持栈中最小元素的记录。在元素入栈时,会比较新元素与辅助栈顶元素,确保辅助栈顶始终是最小值。

最小栈

在这里插入图片描述
我们通过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(); */

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值