【leetcode C++】最小栈

leetcode 155. 最小栈

题目

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

实现 MinStack 类:

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

题目链接

. - 力扣(LeetCode)

文字 和 画图 分析

这道题最关键的一点就是在O(1)的时间复杂度得到最小的元素

如果只有一个栈,得到最小的元素,就是遍历一遍链表,但是时间复杂度是 O(N),所以这种思路是行不通的

这里我们有另一种思路,有两个栈,一个正常push并且pop数据,另一个push最小的数据(每次push都要和栈顶元素进行对比),并且遇到释放数据时,和栈顶元素对比,决定要不要释放

注意:

实际上,存储最小元素的那个栈,存储的数据实际上是<=栈顶元素(防止被pop掉)

代码

复制代码
class MinStack 
{
public:
    MinStack()   
    {}
    
    void push(int val) 
    {
        s1.push(val);
        if(s2.empty() || s2.top() >= val)
        {
            s2.push(val);
        }
       
    }
    
    void pop() 
    {
       if(!s2.empty() && top() == s2.top())
       {
           s2.pop();
       }
       s1.pop();
    }
    
    int top() 
    {
       return s1.top();
    }
    
    int getMin() 
    {
       return s2.top();
    }
    stack<int> s1;
    stack<int> s2;
};
相关推荐
Storynone7 分钟前
【Day21】LeetCode:93. 复原IP地址,78. 子集,90. 子集 II
python·算法·leetcode
知无不研8 分钟前
中介者模式
c++·设计模式·中介者模式
nananaij15 分钟前
【LeetCode-01 两数之和 python解法】
开发语言·python·算法·leetcode
crescent_悦15 分钟前
PTA C++:正整数A+B
数据结构·c++·算法
礼拜天没时间.18 分钟前
力扣热题100实战 | 第31期:下一个排列——数组规律的极致探索
java·算法·leetcode·字典序·原地算法·力扣热题100
lcreek21 分钟前
LeetCode LCR114.火星词典
leetcode··拓扑排序
YYYing.25 分钟前
【Linux/C++多线程篇(一) 】多线程编程入门:从核心概念到常用函数详解
linux·开发语言·c++·笔记·ubuntu
一起搞IT吧30 分钟前
Android功耗系列专题理论之十六:功耗不同阶段&不同模块分析说明
android·c++·智能手机·性能优化
Frostnova丶1 小时前
LeetCode 1415. 长度为 n 的开心字符串中字典序第 k 小的字符串
数据结构·算法·leetcode
美好的事情能不能发生在我身上1 小时前
Leetcode热题100中的:技巧专题
算法·leetcode·职场和发展