剑指offer第2版31题:栈的压入、弹出序列

小渣渣的算法学习笔记:2018秋招备战


数据结构类算法总结:栈


1.题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,
序列4,5,3,2,1是该压栈序列对应的一个弹出序列,
但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

2.代码实现:

public class Solution31 {

    public static void main(String[] args) {
        Solution31 s = new Solution31();
        int []pusha = {1,2,3,4,5};
        int []popa = {4,5,3,2,1};
        boolean c = s.isPopOrder(pusha,popa);
        System.out.println(c);
    }

    public boolean isPopOrder(int push[],int pop[]){
        if(push.length == 0||pop.length == 0)
            return false;
        int index = 0;
        Stack<Integer> s = new Stack<Integer>();
        for(int i = 0;i<push.length;i++){
            s.push(push[i]);
            //辅助栈不为空and pop[i] == s.peek()
            while(!s.empty()&&pop[index]==s.peek()){
                s.pop();
                index++;
            }
        }
        return s.empty();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42561115/article/details/80963131
今日推荐