出栈顺序判断问题——划线法

结合力扣的一道题和自己总结的规律,我得出了一个快速判断出栈顺序的方法。

例题:出栈顺序是1 2 3,问3 1 2 是否是合理出栈顺序

1.先把入栈循序按照栈的存放图示写成一竖排

3

2

1

2.用笔按照出栈顺序把它连接起来

3.向下划线时没有跨越未链接的数,说明入栈合理

(示例中3到1跨过了2,因此不合理)

特别注意,向上跨越不受影响,例如入栈顺序是1 2 3 时,出栈顺序1 3 2是合理的

原理解析

可以理解为模拟栈和队列的匹配过程,这也是 判断出栈合理性算法 的原理

首先我们需要两个队列和一个栈

然后        把 入栈元素按顺序 加入到 队列1

               把 出栈元素按顺序 加入到 队列2

接着        把 队列1的首元素 push(压入)到栈中

1.把栈顶元素和队列2的首元素比较,判断首元素是否相同

2.如果相同,pop(弹出)队列1,2的首元素

   如果不同,push(压入)队列1的下一个元素(当前队列1的首元素)

重复1-2步骤,直到队列1的所有元素被压入栈,且栈顶元素与队列2首元素不同。

如果循环结束时栈为空,则出栈顺序合理。

总结

由此可知

向下画线模拟pop的过程(遵循栈的出栈规则,所以只能从栈顶往下依次pop,不能越过元素)

向上画线模拟push的过程(无特殊要求)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值