zoukankan      html  css  js  c++  java
  • 剑指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,21,(这是和栈的特性挂钩的)。

            因此,谈论一下具体的操作步骤,首先两个序列是给定的(假设一个叫弹入序列,一个叫弹出序列),先看看弹出序列的第一个数是什么,因为栈的特性是先进后出,这个时候呢,就需要你把弹出序列的第一个数从弹入序列的开头进行比对,如果刚好相等,你就把他弹进去,再弹出来;如果不相等,依旧弹进去,然后再和下一个对比,进行循环。就像上面表格里的一样,如果你最后弹出的序列和理想的弹出序列一致,证明他是对应的弹出序列,否则就不是咯。

    二 . 代码实现

    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 =0;
            //循环体操作进栈
            for (int j = 0;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 == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

            哇,说实在的,我好讨厌这个题目,我感觉我思路是对的,用了两个for循环,但是提示不是所有代码都会返回value值,哇,搞得我一头雾水,不过上面的代码的确蛮容易懂的,逻辑能力还是次啊!!!!

  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/WeiMLing/p/10906519.html
Copyright © 2011-2022 走看看