剑指Offer的学习笔记(C#篇)-- 栈的压入、弹出序列
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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,5,3,2,1是刚才那个栈的弹出序列。那我们在举个反例!看下图。
假设,你压入的是1,2,3,4,5,这时候你想弹出4,3,5,1,2,这个时候呢,你操作一下,是绝对无法输出4,3,5,1,2,极限也就输出个4,3,5,,,(这是和栈的特性挂钩的)。
因此,谈论一下具体的操作步骤,首先两个序列是给定的(假设一个叫弹入序列,一个叫弹出序列),先看看弹出序列的第一个数是什么,因为栈的特性是先进后出,这个时候呢,就需要你把弹出序列的第一个数从弹入序列的开头进行比对,如果刚好相等,你就把他弹进去,再弹出来;如果不相等,依旧弹进去,然后再和下一个对比,进行循环。就像上面表格里的一样,如果你最后弹出的序列和理想的弹出序列一致,证明他是对应的弹出序列,否则就不是咯。
二 . 代码实现
using System.Collections.Generic;
class Solution
{
public bool IsPopOrder(int[] pushV, int[] popV)
{
// write code here
//定义一个栈a,定义一个常数i=0
Stack<int> a = new Stack<int>();
int i =;
//循环体操作进栈
for (int j = ;j<pushV.Length;j++)
{
a.Push(pushV[j]);
//满足i<popV的长度以及第i个出栈数等于顶栈的数执行出栈
while(i<popV.Length && popV[i]==a.Peek())
{
a.Pop();
i++;
}
}
//输出
if(a.Count == )
{
return true;
}
else
{
return false;
}
}
}
哇,说实在的,我好讨厌这个题目,我感觉我思路是对的,用了两个for循环,但是提示不是所有代码都会返回value值,哇,搞得我一头雾水,不过上面的代码的确蛮容易懂的,逻辑能力还是次啊!!!!
剑指Offer的学习笔记(C#篇)-- 栈的压入、弹出序列的更多相关文章
- 剑指Offer(二十一):栈的压入、弹出序列
剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...
- (剑指Offer)面试题22:栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 【剑指offer】面试题22:栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列 ...
- 《剑指offer》— JavaScript(21)栈的压入、弹出序列
栈的压入.弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5, ...
- 【剑指offer】栈的压入弹出序列,C++实现(举例)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...
- 剑指offer - 栈的压入弹出序列 - JavaScript
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...
- 剑指Offer20 栈的压入弹出序列是否正确
/************************************************************************* > File Name: 20_IsPopO ...
- 剑指offer-面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...
- 剑指Offer的学习笔记(C#篇)-- 反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...
随机推荐
- 数据解析,懒加载,代理ip
在前面的requests流程中,还缺少了一步重要的流程,就是在持久化存储之前需要进行制定的数据解析.因为在大多数情况下,我们都会使用聚焦爬虫,也就是爬取页面中的指定部分数据值,而不是整个页面的数据. ...
- SQL语句性能优化操作
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...
- 通过崩溃trace来查找问题原因
从友盟中, 我们可能会得到如下信息: Application received signal SIGSEGV (null) ( 0 CoreFoundation 0x359348a7 __except ...
- Spring当中的名称装配和类型装配有什么区别?
6 人赞同了该回答 Spring auto-wire的 五种方式:1:no 默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean2:byName 通过参数名 自动装配,如果一个bea ...
- ASP.NET 4.0 页面 ValidateRequest="false" 失效不起作用
当ASP.NET 2.0升级到 ASP.NET 4.0后,页面的 ValidateRequest="false" 不起作用. 因为 ASP.NET 4.0 请求验证被提前到IHtt ...
- Ubuntu 17.4下如何安装和配置flash player
Ubuntu Linux系统下没有自带的flash player,要自己手动安装.下面post出简单的安装过程. 首先打开终端,输入命令:sudo apt-get install flashplugi ...
- 2017SN多校D1T1 loveletter:模拟
题意: 两张n*m的纸.一张透明纸,上面有些地方是黑的,有些地方是透明的.另一张纸上写满了字母. 你需要将透明纸放在写字的纸上,分别顺时针旋转0°.90°.180°.270°,每次从上到下.从左到右写 ...
- ES忽略TF-IDF评分——使用constant_score
Ignoring TF/IDF Sometimes we just don’t care about TF/IDF. All we want to know is that a certain wor ...
- Java_Time_01_获取当前时间
1. Date SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// ...
- linux命令学习:echo详解,格式化输出,不换行输出
shell脚本不换行刷新数据 #!/bin/bash ] do a=$(ifconfig eth0 | grep 'RX pac' | awk '{print $2}' | awk -F: '{pri ...