【剑指offer】栈的压入、弹出序列

一、题目:

       输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

二、思路:

       先吐槽一下啊,别人的代码看不懂还是自己写吧。。。

       思路是酱婶儿的:用两个列表,以栈的形式模拟栈内和栈外,left表示栈内,right表示栈外。然后从pop队列里面依此取出元素,然后查找该元素在栈内还是栈外,如果在栈外,(栈外元素随时都可以弹出的,因为压进栈的时间可选)就把right中该元素前面的元素压进栈,也就是放到left同时删除right中的这些元素。如果在栈内,那就要判断是否是栈顶元素,因为只能弹出栈顶元素,若否则返回False,否则还能抢救一下,把该元素从left弹出,再观察pop队列中其他元素。如果pop队列都检查完了都合格,就返回True。

三、代码:

   

猜你喜欢

转载自www.cnblogs.com/EstherLjy/p/9302021.html