剑指 Offer 31. 栈的压入、弹出序列

思路

  这道题问的就是第二个序列有没有可能是第一个序列的压栈出栈的玩法。这里直接模拟一个栈把pushed的元素一个个压进去,再拿一个指针从头指向popped序列。如果此时压进来的元素和指向的相等,那就有可能是这么玩的,此时就把模拟栈中的top元素压出来,指针++,这时候使用while循环判断有没有可能是这时候把栈中的元素拿出来的玩法,如果是那就while一直下去,如果不是这么玩法那就说明是弹的后面进来的元素,依次这么判断下去,如果你顺序不对导致玩法不对,这时候模拟栈中的元素不为空,指针也没继续“玩下去”,说明顺序不对,返回false了。

代码示例

func validateStackSequences(pushed []int, popped []int) bool {
    stack:=[]int{}
    pos:=0
    for i:=0;i<len(pushed);i++{
        stack=append(stack,pushed[i])
        for len(stack)!=0 && popped[pos]==stack[len(stack)-1]{
            stack=stack[:len(stack)-1]
            pos++
        }
    }

    return pos==len(popped)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值