/*
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例 2: 输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。 */ #include <iostream>
#include <vector> using namespace std; class Stack{
private:
int top_loci;
int size;
int capacity;
int *data;
public:
Stack(int init_size=100);
~Stack(); void push(const int val);
void pop();
int top();
bool empty();
bool full();
void allocate(); }; Stack::Stack(int init_size){
top_loci = 0;
capacity = init_size;
size = 0;
data = new int[init_size];
} Stack::~Stack(){
delete [] data;
data = nullptr;
capacity = 0;
size = 0;
top_loci = 0;
} void Stack::push(const int val){
if(full()){
allocate();
} size++;
data[top_loci++] = val;
} void Stack::pop(){
if(empty())
std::cerr<<"stack empty,cant pop"<<endl;
size--;
top_loci--;
} int Stack::top(){
if(empty())
std::cerr<<"stack empty, cant top"<<endl;
return data[top_loci-1];
} void Stack::allocate(){
int *tmp = new int[2*capacity];
for(int i=0;i<size;i++)
tmp[i] = data[i];
capacity = 2*capacity;
delete []data;
data = tmp; } bool Stack::empty(){
return size == 0;
} bool Stack::full(){
return size==capacity;
} class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
if(pushed.empty() || popped.empty())
return false; Stack s(2);
int popped_ptr = 0;
int pushed_ptr = 0; int curr_top_val;
while(pushed_ptr<pushed.size()){
if( !s.empty() && s.top()==popped[popped_ptr]){
popped_ptr++;
s.pop();
}else{
s.push(pushed[pushed_ptr++]);
}
} while(!s.empty()){
if(s.top()==popped[popped_ptr++])
s.pop();
else
break;
} //cout<<popped_ptr<<"==";
return popped_ptr==popped.size();
}
}; int main(int argc, char const *argv[])
{
Solution solu; vector<int> pushed1 = {1,2,3,4,5};
vector<int> poped1 = {4,5,3,2,1}; vector<int> pushed2 = {1,2,3,4,5};
vector<int> poped2 = {4,3,5,1,2}; cout<<solu.validateStackSequences(pushed1,poped1)<<endl;
cout<<solu.validateStackSequences(pushed2,poped2)<<endl; return 0;
}

Leetcode-栈的压入弹出序列的更多相关文章

  1. 【剑指offer】栈的压入弹出序列,C++实现(举例)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...

  2. 剑指offer - 栈的压入弹出序列 - JavaScript

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

  3. 剑指offer-面试题22.栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...

  4. 剑指Offer20 栈的压入弹出序列是否正确

    /************************************************************************* > File Name: 20_IsPopO ...

  5. 剑指offer-栈的压入弹出序列21

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

  6. 剑指offer-面试题31-栈的压入弹出序列-栈

    #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...

  7. 剑指offer 栈的压入弹出 顺序

    判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...

  8. redis list 查询、下标查询、删除、裁剪、压入弹出、队列实现

    查询  lrange list 0 1 // 注意0和1之间是空格:这个命令和pop命令不一样,不会删除里面的值lrange list 0 -1 // 所有的 下标查询 lpush person zs ...

  9. 剑指Offer(二十一):栈的压入、弹出序列

    剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  10. 每日一题 - 剑指 Offer 31. 栈的压入、弹出序列

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag:栈 难易程度:中等 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入 ...

随机推荐

  1. 链接服务器导致SQL Server停止响应

    概要 如果多个实例中同时存在数据源为对方实例的链接服务器,并且开启了"分发服务器"的属性,您可能会遇到这种情况. 1 现象 14:31时,在SSMS中检查HIS实例是否有复制订阅时 ...

  2. IISExpress 跨域cookie的奇怪问题

    测试环境 WIN10,IIS 10,IISExpress 10,Chrome 120,Microsoft Edge 114 网站A 端口7001 只有1个Default.aspx,无前端代码.逻辑很简 ...

  3. Java 包装类的使用(自动装箱+自动拆箱)+Vector

    1 package com.bytezreo.ut; 2 3 import java.util.Scanner; 4 import java.util.Vector; 5 6 /** 7 * 8 * ...

  4. 专访实在智能孙林君:颠覆传统RPA的实在IPA模式如何做到真正人人可用?

      王吉伟对话实在智能孙林君:颠覆传统引领RPA行业的实在IPA模式是如何炼成的? 王吉伟对话实在智能孙林君:为什么第一款颠覆行业的RPA诞生在实在智能? 专访实在智能孙林君:打造出真正人人可用的实在 ...

  5. Redis集群Cluster

    Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好 ...

  6. 我的闲鱼Python爬虫接单总结和经验,最高600元一单

    最近,我在闲鱼上利用 Python 爬虫技术接了一些任务,想必你一定好奇,通过这样的方式,到底能不能挣钱,能挣多少钱?今天我就来分享一下我的经验和总结. 一.接单经历 之前 Vue 的作者尤大在微博上 ...

  7. 基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验

    简介 实验包含 2部分: 基于 Mindspore 框架的模型本地训练及预测 基于 Modelarts 平台和 PyTorch框架的模型训练及部署 基于 Mindspore 框架的模型本地训练及预测 ...

  8. 【个人笔记】VBox7安装Debian网络下载慢问题处理

    使用镜像安装Debian的过程中,会安装一些常用的软件包.但在安装软件包的阶段,默认情况下会通过网络进行下载.即使配置了国内的镜像,但是由于网络问题依然很慢.这个时候需要的在安装阶段选择从默认的DVD ...

  9. 崩溃bug日志总结2

    目录介绍 1.1 java.lang.ClassNotFoundException类找不到异常 1.2 java.util.concurrent.TimeoutException连接超时崩溃 1.3 ...

  10. Cesium之原生控件

    1. 控件概述 Cesium的开始,基本上是从new一个Viewer开始 // ... <div id="cesiumContainer"></div> & ...