标签:面试题 数字 压入 Ppush 栈顶 三十一 弹出 序列
输入两个序列,第一个序列为栈的压入顺序,第二个序列为栈的弹出顺序,设问第二个序列是否是第一个序列的弹出序列。
方法:定义一个辅助栈,和两个指针分别指向两个序列的开头,压入序列进栈,栈顶元素与弹出序列指针指向的比较,不一致,继续进栈比较,一致,弹出栈顶元素。
规律:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出;
如果下一个弹出的数字不在栈顶,那么就把压栈序列的元素压进,直到栈顶为下一个弹出数字为止;
如果所有序列都压入还没有找到下一个弹出的数字,则第二个序列是否是第一个序列的弹出序列
注意:每个栈的出栈顺序不止一个,不能一位两个数组一个从头一个从尾遍历比较就行
public static boolean IsPopOrder( int [] Ppush , int [] Ppop){ if( Ppush==null||Ppop==null||Ppush.length<=0 || Ppop.length<=0) return false int p1=0 ,p2=0; Stack<Integer> stack=<u>new</u><u> Stack()</u>; while(p1<Ppush.length && p2<Ppop.length){ while((stack.empty()||stack.peek()!=Ppop[p2])&& p1<Ppush.length ){ stack.push( Ppush[p1] ) ; p1++; } while(!stack.empty()&&stack.peek()==Ppop[p2] && p2<Ppop.length ) { stack.pop(); p2++; } } if(!stack.empty()|| p1<Ppush.length || p2<Ppop.length) return false; return true; }
标签:面试题,数字,压入,Ppush,栈顶,三十一,弹出,序列 来源: https://www.cnblogs.com/niliuxiaocheng/p/12592321.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。