LeedCode 155 最小栈 c++ 《分析和完整的解题步骤》

本文介绍了一种使用C++实现的特殊栈结构,该结构支持常规的push、pop和top操作,同时能在常数时间内检索到栈中的最小元素。通过维护两个栈,一个用于存储所有元素,另一个用于跟踪最小值,实现了高效的最小值检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++解法:
我们先看一下题目的要求:

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

我们先想一想怎么样解决这个问题,
其实有人家提供的接口,就可以看到这道题其实很简单,不是很难,也没有什么分析的,就是在实现的时候要小心,下面我把代码先写在下面,我们先看一看:

class MinStack {
public:
    /** initialize your data structure here. */

   //这里是不是奇怪,怎么不一样,其实在哪里,我已经把那个接口删了,它会自动调用系统给提供的,
   //不用我们自己实现
    
void push(int x) {
    _st.push(x);
    if(_minst.empty() || x <= _minst.top())  //这里有可能里面没有一个节点,所以要判断一下,为空直接添加
    {
        _minst.push(x);         //如果是小于,那么就要插入进去;
    }
}

void pop() {
    if(_st.top() == _minst.top())   //先判断两个是否相等;
    {
        _minst.pop();   //相等,就将_minst,删除;
    }
    _st.pop();   //_st它是每一次都要删;
}

int top() {
    return _st.top();
}

int getMin() {
    return _minst.top();
}
stack<int> _st;
stack<int> _minst;
};
/**
 * 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();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值