题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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#篇)-- 栈的压入、弹出序列的更多相关文章

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

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

  2. (剑指Offer)面试题22:栈的压入、弹出序列

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

  3. 【剑指offer】面试题22:栈的压入、弹出序列

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

  4. 《剑指offer》— JavaScript(21)栈的压入、弹出序列

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

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

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

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

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

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

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

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

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

  9. 剑指Offer的学习笔记(C#篇)-- 序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...

  10. 剑指Offer的学习笔记(C#篇)-- 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...

随机推荐

  1. LeetCode:N叉树的最大深度【559】

    LeetCode:N叉树的最大深度[559] 题目描述 给定一个N叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 例如,给定一个 3叉树 : 我们应返回其最大深度, ...

  2. Git 使用初步

    官网:https://git-scm.com/ 官方文档:https://git-scm.com/doc 比较简略的资料(对基本概念没有解释很清楚):http://wenku.baidu.com/li ...

  3. 9.2 NOIP提高组试题精解(2)

    9-18 fruit.c #include <stdio.h> #define MAXN 10000 int Queue1[MAXN], Queue2[MAXN]; void Insert ...

  4. python读取文件后切片

    from itertools import islice with open(“1.txt") as f: for a in islice(f,0,2): print(a)

  5. CSS3咖啡制作全过程动画

    CSS3咖啡制作全过程动画是一款利用纯CSS3实现的咖啡制作全过程动画特效,从把咖啡豆导入杯子,到把咖啡煮好,整个动画还比较流畅. 源码:http://www.huiyi8.com/sc/8788.h ...

  6. windows与Linux操作系统的差别

    用户需要记住:Linux和Windows在设计上就存在哲学性的区别.Windows操作系统 倾向于将更多的功能集成到操作系统内部,并将程序与内核相结合:而Linux不同 于Windows,它的内核空间 ...

  7. python打印字体颜色

        格式:\033[显示方式;前景色;背景色m 显示方式           意义-------------------------0                终端默认设置1         ...

  8. ACM学习历程—HDU5396 Expression(递推 && 计数)

    Problem Description Teacher Mai has n numbers a1,a2,⋯,an and n−1 operators("+", "-&qu ...

  9. 【C++基础】浅拷贝和深拷贝

    简单理解: 对于一块内存,浅拷贝只是增加了一个指针,这样两个变量都指向这块内存,二深拷贝则是先开辟一块同等大小的新内存区,将待拷贝内存的内容复制过来,再赋予一个指向新内存的指针.区别在于:浅拷贝会造成 ...

  10. POJ2349(求生成树中符合题意的边)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14977   Accepted: 4777 D ...