[LeetCode] 155. 最小栈

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

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:

"MinStack","push","push","push","getMin","pop","top","getMin"\] \[\[\],\[-2\],\[0\],\[-3\],\[\],\[\],\[\],\[\]

输出: [null,null,null,null,-3,null,0,-2]

解释:

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.getMin(); --> 返回 -3.

minStack.pop();

minStack.top(); --> 返回 0.

minStack.getMin(); --> 返回 -2.

解题思路:

这题使用两个栈,可以轻松解决

一个是正常放数据的栈一个是放最小值的栈

这里最关键的是如果放入正常栈的值和最小栈中的栈顶元素相等也需要入最小栈,因为_st出栈的时候可能会出两个相同的最小值,就会出问题

代码实现:

cpp 复制代码
class MinStack {
public:
    //都是自定义类型不需要去手动构造
    MinStack() {}
    
    void push(int val) {
        _st.push(val);

        if(_minst.empty() || _minst.top() >= val)
        {
            _minst.push(val);
        }
    }
    
    void pop() {
        if(_minst.top() == _st.top())
        {
            _minst.pop();
        }

        _st.pop();
    }
    
    int top() {
        return _st.top();
    }
    
    int getMin() {
        return _minst.top();
    }

    stack<int> _st;
    stack<int> _minst;
};
相关推荐
黑色的山岗在沉睡10 分钟前
LeetCode100.4 移动零
数据结构·算法·leetcode
霖0012 分钟前
PCIe数据采集系统
数据结构·经验分享·单片机·嵌入式硬件·fpga开发·信号处理
xueyinan16 分钟前
小刚说C语言刷题—1088求两个数M和N的最大公约数
c语言
_Itachi__16 分钟前
LeetCode 热题 100 114. 二叉树展开为链表
linux·leetcode·链表
敷啊敷衍18 分钟前
深入探索 C++ 中的 string 类:从基础到实践
开发语言·数据结构·c++
方博士AI机器人29 分钟前
算法与数据结构 - 二叉树结构入门
数据结构·算法·二叉树
{⌐■_■}36 分钟前
【redis】redis常见数据结构及其底层,redis单线程读写效率高于多线程的理解,
数据结构·数据库·redis
什么名字都被用了40 分钟前
编译openssl源码
c++·openssl
全栈凯哥1 小时前
Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
java·算法·leetcode
sx2436941 小时前
day21:零基础学嵌入式之数据结构
数据结构