stack刷题

简介: stack刷题

最小栈

最小栈

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

实现 MinStack 类:

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

思路:使用两个栈,一个栈作为普通的栈,push、pop、top等操作;另一个栈,判断要 push的元素是否是栈中的最小值,是就 push。这保证了 第二个栈的栈顶元素永远就是堆栈中的最小元素。

pop 元素的时候,如果第二个栈的栈顶元素和第一个栈的栈顶元素相同时,再 pop 第二个栈的栈顶元素。

class MinStack {
public:
    MinStack() {}
    void push(int val) {
        st1.push(val);
        if(st2.empty() || val <= st2.top()) st2.push(val);
    }
    void pop() {
        if(st1.top()==st2.top()) st2.pop();
        st1.pop();
    }
    int top() {
        return st1.top();
    }
    int getMin() {
        return st2.top();
    }
    stack<int> st1;
    stack<int> st2;
};

栈的压入、弹出序列

栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

1.  0<=pushV.length == popV.length <=1000

2.  -1000<=pushV[i]<=1000

3.  pushV 的所有数字均不相同

思路:模拟这个入栈、出栈序列

依次入栈,直到栈顶元素等于出栈序列的第一个元素,这时候就出栈,再次判断栈顶元素是否等于出栈序列的下一个元素,等于就出栈,直至不等于或栈为空时,继续入栈。

当入栈序列被遍历结束后,模拟入栈、出栈这个过程就结束了。判断出栈序列是否可以满足这个入栈序列:当栈最终为空时,说明出栈序列可以匹配入栈序列,返回 true,否则就是不匹配,返回 false

class Solution {
public:
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        int cur1 = 0,cur2 = 0, n = pushV.size();
        stack<int> st;
        while(cur1 < n)
        {
            st.push(pushV[cur1++]);
            while(!st.empty() && st.top() == popV[cur2])
            {
                st.pop();
                cur2++;                
            }
        }
        return st.empty();
    };
};
相关文章
|
网络协议 Linux
Linux基础之网络配置
Linux基础之网络配置
756 1
|
Dart 小程序 API
鸿蒙原生开发手记:01-元服务开发
元服务是鸿蒙系统中的一种轻量级应用形态,无需下载即可直接运行,类似于微信小程序但更轻量。使用原生开发,性能和体验更优。创建元服务需使用 DevEco 工具,支持深色模式和服务卡片功能,开发测试和上架流程详见相关文档。
715 1
鸿蒙原生开发手记:01-元服务开发
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
Linux Docker Windows
windows10&11 启动Docker Desktop报 “Docker Desktop - Unexpected WSL error”
windows10&11 启动Docker Desktop报 “Docker Desktop - Unexpected WSL error”
717 0
|
SQL 分布式计算 关系型数据库
【大数据学习篇4】Hive安装与操作(上)
【大数据学习篇4】Hive安装与操作
336 0
|
机器学习/深度学习 存储 算法
非线性回归中的Levenberg-Marquardt算法理论和代码实现
非线性回归中的Levenberg-Marquardt算法理论和代码实现
764 0
非线性回归中的Levenberg-Marquardt算法理论和代码实现
|
人工智能 监控 安全
使用 ESP32 + Python 实现在线人员入侵检测
在工业园区中,为了园区安全,某些区域不允许人员随便进入,通过人为监控不能做到全天候监视,使用摄像头结合人体检测可以有效解决这个问题。本文则是利用HaaS Python通过摄像头采集环境图片并调用HaaS云端积木能力判断照片内是否有人体出现。
1351 1
使用 ESP32 + Python 实现在线人员入侵检测
|
架构师 Java 中间件
阿里内部从初级程序员到架构师学习路线+配套学习资源
阿里巴巴终于公开了从初级程序员到架构师的学习路线图,这里相对应的基本上就是从P5到P8的晋升体系!今天老师将会带着大家从初级程序员开始一点点分享整个晋升体系!
|
机器学习/深度学习 数据挖掘 测试技术
新视觉任务!CVPR 2021 Oral | OWOD:面向开放世界的目标检测
我们的实验评估和研究分析了ORE在实现开放世界目标方面的功效。作为有趣的by-product,我们发现识别和表征未知实例有助于减少增量目标检测设置中的混乱,在此方法中,我们无需任何方法上的努力即可获得最先进的性能。我们希望我们的工作将吸引对这个新发现的但至关重要的研究方向的进一步研究。
新视觉任务!CVPR 2021 Oral | OWOD:面向开放世界的目标检测