剑指offer之判断栈的压入弹出序列

1.题目描述

image.png

2.解决

想了一会之后还是没有思路,本来有一些让弹出数组反向的思路,但是没有想出来,一个参考答案就是使用一个新的栈,按照压栈顺序,使数组中元素进栈,当压入栈中的元素等于出栈的第一个元素的时候,出栈,当最后新创建的栈为空时,返回true,这确实是一个很好的解决方法,见世面了

import java.util.*;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        if(pushA.length == 0 || popA.length == 0 || pushA.length != popA.length)
              return false;
        Stack<Integer> stack = new Stack();
        int index = 0;
        for(int i = 0;i < pushA.length;i++){
            stack.push(pushA[i]);
            while(!stack.isEmpty() && stack.peek() == popA[index]){
                stack.pop();
                index++;
            }
        }
        
        return stack.isEmpty();
    }
}

首先是为了代码的健壮性,进行条件的判断,我自己完成的代码虽然可以实现,但是超时,可见在代码的简洁性,去除冗余性方面,我还是需要练习的。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://hadoo666.top/archives/剑指offer之判断栈的压入弹出序列