c++实现---栈的压入、弹出序列

【剑指**】31.栈的压入,弹出序列 31 栈的押入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺 序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4, 5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序 列。(注意:这两个序列的长度是相等的) 分析 思路是,需要构造一个辅助栈来模拟给... 阅读详情

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路:因为弹出之前的值都会先入栈,所以借助辅助栈来实现。
1.用指针i指向pushV的第一个位置, 指针j指向popV的第一个位置。
2.如果pushV[i] != popV[j], 那么应该将pushV[i]放入辅助栈中,++i。
3.否则,pushV[i]popV[j], 说明这个元素是放入栈中立马弹出,所以,++i, ++j,然后应该检查popV[j]与栈顶元素是否相等,如果相等,++j, 并且弹出栈顶元素。
4.如果i
pushV.size(), 说明入栈序列访问完,此时检查栈是否为空,如果为空,说明匹配,否则不匹配。
代码实现:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int> tt;//借助一个辅助栈来实现
        int i=0,j=0;
        while(i<pushV.size()){
            if(pushV[i]!=popV[j]){//当压栈序列和弹栈序列对应元素不相等
                tt.push(pushV[i++]);//将压栈指针指向的元素压入辅助栈
            }
            else{
                ++i,++j;
                while(!tt.empty()&&tt.top()==popV[j]){//当辅助栈不为空并且辅助栈栈顶元素和当前弹栈序列元素相等
                    tt.pop();//则一直出栈,并且弹栈的指针后移
                    ++j;
                }
            }
        }
        return tt.empty();
    }
};
C++算法栈类经典题--栈的压入、弹出序列 + 逆波兰表达式求值(栈的使用)+用栈实现队列 栈的压入、弹出序列 题目链接 class Solution { public: //拿入栈顺序去模拟出栈顺序,如果可以模拟出来,就是ok的,如果不能就不行。 bool IsPopOrder(vector<int> pushV,vector<int> popV) { stack<int> s; int i=0,j=0;//push序列的下标和pop序列的下标 while... 阅读详情

相关推荐

斯坦福大学CS224d基础1:线性代数知识

本文为斯坦福CS229的内容,也是CS224d课程的背景数学知识。概括了在机器学习和深度学习中用到的大部分线性代数知识。为了便于大家查漏补缺,这里根据英文版本整理了一个中文版本。

龙心尘 2万+

出栈顺序(c++)

如果这N个数字按照栈的方式存储,请你判断能否按照第二行的顺序出栈。栈作为一种数据结构,它按照后进先出的原则存储数据.看在我这么努力写文章的份上,你愿意给我一个关注吗?2.第二行N个数字,每个数字范围 [1,100]1.第一行一个整数N 范围[1,10]如果可以,请输出"Yes"如果不可以,请输出"No"有人说想要有解释的代码。还有什么题需要我解答吗?

自家慢诩便便腹,开卷方知未读书。 1097

【Rcode】生存分析: KM & COX回归& 随机森林& nomogram

本文使用了R——survival包下的lung数据进行方法测试: 1)KM 2) Cox回归:多因素 3)随机森林因子(根据cox回归结果) 4)nomogram ( 根据cox回归结果,建立了中位生存时间,1年5年生存率的概率计算) -------------------????????‍♀️本文只有干货,非常干!????----------------------------- 一、数据加载 #生存分析 library("survival") library("survminer") data("

weixin_43172152的博客 9274

C++ 栈的基本操作

1 // zhan.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 using namespace std; 7 typedef struct stacknode 8 { 9 int data; 10 stru...

weixin_33859504的博客 1304

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

【CSP-J/S初赛知识点整理】

CSP-J/S初赛知识点整理

qq_43884946的博客 1万+

栈---顺序栈(C++)

栈 栈的基本概念 栈是只允许在一端进行插入或删除操作的线性表。 假设某个栈S=(a1、a2、a3、a4、a5)。a1为栈底元素,a5为栈顶元素。由于栈只能在栈顶进行插入和删除操作,进栈次序为a1、a2、a3、a4、a5出栈顺序为a5、a4、a3、a2、a1,所以栈的操作特性是后进先出(LIFO) 如果有n个不同元素进栈,出栈元素不同排列的个数为1n+1Cn2n\frac{1}{n+1} \textrm{C}_{n}^{2n}n+11​Cn2n​上述公式称为卡特兰数。 栈的基本操作 InitStack(&am

qq_44195148的博客 945

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 930

有n个元素依次进栈,输出出栈可能的序列数(C++)

参考:https://blog.youkuaiyun.com/qq_26286193/article/details/80216479 以第一个为参照 :(不妨假设第一个为A,总元素数为n) A第一个出栈:剩下n-1个元素再排列出栈次序 A第二个出栈:前面一个元素排列出栈次序(显然排列总数为1),剩下n-2个元素再排列出栈次序 A第三个出栈:前面二个元素排列出栈次序(显然排列总数为2),剩下n-3个元素再排列出栈次序 … 所以得到规律: #include<bits/stdc++.h> using name

qq_58126670的博客 2609

ESD防护设计宝典(二十三):ESD与EOS失效差异分析

ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。

m0_56451176的博客 322

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出为1110,这就可 以知道是F3行拉低了,同时这时候是程序控制F4拉低的,这样就可以知道是F4列导致它转态变化了的,这样就可以定位出是F4列F3行的按键按下了;其他的列也是这样子扫描

lhh_qrsly的博客 7059

栈的压入、弹出序列 — C++实现

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路 代码实现 ...

Jeaten 544

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

剑指Offer JZ21 栈的压入、弹出序列 C++实现

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路 方法一:模拟法 1、思路:模拟栈的压入和弹出,对压入序列进行遍历,在每次循环的过程中,先入栈,然后进行判断: 当栈不为空且栈顶元素等于当前弹出元素时,说明该元素在此时被弹出,则出

weixin_41020287的博客 220

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

剑指offer(21)——C++实现判断栈的压入、弹出序列

题目 给定两个序列,判断第二个序列是否是第一个序列顺序压入时的弹出序列 考察点 栈 :栈规定的先入先出是指压入弹出的位置,而非元素压入弹出的时间 解题思路 添加一个辅助栈,顺序压入第一个序列元素,当栈顶元素与弹出序列的元素相同时,直接弹出,否知,一直压入,直至找到相同元素,若所元素压入完还为找到,即表示弹出序列不是压入序列的一种弹出方式。 完整代码 /*21-栈的压入、弹出序列*/ #incl...

fengwenpei的博客 324

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

剑指 Offer 31. 栈的压入、弹出序列(C++实现)

剑指 Offer 31. 栈的压入、弹出序列 剑指 Offer 31. 栈的压入、弹出序列 思路 class Solution { //思路是:遍历入栈数组pushed,和弹栈数组popped,用一个新的栈pushSt来做中间层,用来模拟出栈和入栈是否匹配成功;就是pushed数组入栈pushSt,而popped数组向前走遍历就类似出栈pushSt //只要是满足,遍历完弹栈数组poped,那么就表示模拟成功,该序列弹栈poped数组是合法的 public: bool val

呋喃吖的博客 1190

剑指offer:栈的压入、弹出序列 使用C++实现

题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 题目解析已经写在代码中了! //首先按照数组2进行遍历 //1.判断改字符是否是...

m0_38086244的博客 262

剑指 Offer 31. 栈的压入、弹出序列(c++实现)

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

weixin_43360897的博客 108

《剑指offer》面试题31:栈的压入、弹出序列(C++实现)

@TOC) 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 题目分析 这道题要注意的一点是,栈可以一边压入,一边弹出。而不是一次性按照...

weixin_43850408的博客 254

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

原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列。注意:假设压栈序列的全部数字均不相等。 例如: 序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就...

weixin_34163553的博客 120

栈的压入与弹出

题目描述:输入两个序列,一个为压入的序列,一个为弹出的序列。检查这两个序列是否符合栈的压入和弹出的性质。 算法实现: 1 #include<iostream> 2 #include<stack> 3 using namespace std; 4 5 bool IsPopOrder(const int *Push, const int *...

aaa520288的博客 129

剑指 Offer 31. 栈的压入、弹出序列(C++实现)

剑指 Offer 31. 栈的压入、弹出序列。

Kk_1025的博客 130

最小栈 与 栈的压入、弹出序列

记录两个有关栈的oj题, (1)最小栈 (2)栈的压入、弹出序列

@初阶牛的博客 394

剑指offer第二十一题【栈的压入、弹出序列】c++实现

栈的压入、弹出序列 参与人数:1958时间限制:1秒空间限制:32768K通过比例:22.25%最佳记录:0 ms|8552K(来自  geeek) 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但

u011692312的专栏 992

剑指offer 面试题31:栈的压入、弹出序列

此题为检查栈的压入序列和弹出序列是否匹配 思路:构造辅助栈,由于压入栈的数字均不相等,可将压入栈的序列逐个压入辅助栈,如果栈顶和弹出栈的元素相等,则弹出栈顶元素,并将记录当前所比较的弹出栈的位置向后移动。 class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { ...

Ben 215

剑指offer-栈的压入和弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路 需要注意栈的压入顺序不是一直都是直接压入,中间夹杂着弹出操作 使用一个辅助栈,...

weixin_42100456的博客 173
上一篇: c++实现---包含min函数的栈
下一篇: c++实现---从上往下打印二叉树
codeFizz
博客等级 码龄9年 10粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值