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

题目:给一个栈的push和pop的序列,让你判断这个pop的序列是否是符合规则的(元素都不相等),符合规则返回true,不符合返回false。

public boolean validateStackSequences(int[] pushed, int[] popped)

思路思路不完全清楚别去写代码(否则就是在浪费时间)。一定要先把思路固定再说其他,固定不下来就花更多的精力去固定,直到固定下来。

核心就是先push,再去判断。为什么?

  • 因为给你push序列,你就只能先去push,然后在过程中去拿stack.peek()和pop序列比较,来看看pop序列符合不符合规则(最后stack.pop为empty就符合规则)。
  • 只能这样验证,很自然。
  • 注意:判断不只一次,所以用while。
	/*
    思路先确定。思路:先push,然后再判断。首先应该是这个。
     */
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        //当pushed和popped都没有元素时,也返回true
        Stack<Integer> stack = new Stack<>();
        int x = 0;
        for (int item : pushed) {
            //不论怎样,先把元素push进去
            stack.push(item);
            //当栈顶元素等于popped对应元素时stack.pop(),可能一下子pop多个,所以用while
            while(!stack.isEmpty() && stack.peek() == popped[x]){
                stack.pop();
                x++;
            }
        }
        //看看最后stack是否为空empty
        return stack.isEmpty();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值