【剑指offer-Java版】22栈的压入弹出序列

来源:互联网 发布:淘宝卖家怎么添加商品 编辑:程序博客网 时间:2024/06/06 03:17

栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序

思路:纯粹的模拟栈的压入和弹出顺序
分别遍历压栈序列seq1和另一个序列seq2
比较当前栈顶元素和seq2的当前值
如果相等,那么弹出,seq2的指针下移
如果不等,那么依次压入seq1中的元素直到遇到栈顶等于当前seq2指针所知元素
如果上述遍历中将seq1中所有数据都压入栈之后,仍未找到seq2当前元素,那么失败
如果遍历完,两个序列的指针都到达末尾,那么成功

    public class _Q22 {    public boolean IsPopOrder(int seq1[], int seq2[]){        if(seq1 == null) return false;        if(seq2 == null) return false;        // 此处应该抛出异常提示调用者        if(seq1.length != seq2.length) return false;        boolean result = true;        Stack<Integer> stack = new Stack<>();        int seq1Index = 0;        stack.push(seq1[seq1Index++]);        for (int i = 0; i < seq2.length;) {            if (seq2[i] == stack.peek()) {                i++;                stack.pop();            } else {                if (seq1Index < seq1.length) {                    stack.push(seq1[seq1Index++]);                }else{                    result = false;                    break;                }            }        }        return result;    }    }

测试代码:

    public class _Q22Test extends TestCase {    _Q22 popOrder = new _Q22();    public void test(){        int seq1[] = {1, 2, 3, 4, 5};        int seq2[] = {4, 5, 3, 2, 1};        int seq3[] = {4, 3, 5, 1, 2};        int seq4[] = {5};        System.out.println(popOrder.IsPopOrder(seq1, seq2));        System.out.println(popOrder.IsPopOrder(seq1, seq3));        System.out.println(popOrder.IsPopOrder(seq4, seq4));        System.out.println(popOrder.IsPopOrder(null, null));    }    }
1 0
原创粉丝点击