作好此题的关键在于读懂题目的意思,作了部分题目后发现,该题属于一个不易理解的题目,如今用俗话来解释一下。两个内容是同样,但顺序不一样的序列,其中一个是入栈,一个是出栈,(能够边入边出),让你判断一下,出栈的那个对应的究竟是不是入栈的那个。看下图,实例化解释一下。spa
假设,我入栈的序列是1,2,3,4,5,我能够经过以上的步骤弹出4,5,3,2,1。这就说明4,5,3,2,1是刚才那个栈的弹出序列。那咱们在举个反例!看下图。code
假设,你压入的是1,2,3,4,5,这时候你想弹出4,3,5,1,2,这个时候呢,你操做一下,是绝对没法输出4,3,5,1,2,极限也就输出个4,3,5,2,1,(这是和栈的特性挂钩的)。blog
所以,谈论一下具体的操做步骤,首先两个序列是给定的(假设一个叫弹入序列,一个叫弹出序列),先看看弹出序列的第一个数是什么,由于栈的特性是先进后出,这个时候呢,就须要你把弹出序列的第一个数从弹入序列的开头进行比对,若是恰好相等,你就把他弹进去,再弹出来;若是不相等,依旧弹进去,而后再和下一个对比,进行循环。就像上面表格里的同样,若是你最后弹出的序列和理想的弹出序列一致,证实他是对应的弹出序列,不然就不是咯。it
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值,哇,搞得我一头雾水,不过上面的代码的确蛮容易懂的,逻辑能力仍是次啊!!!!io