栈的压入、弹出序列

题目描述:

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

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。


解法:

用一个栈模拟过程
遍历整个入栈数组
如果当前栈不为空且当前栈顶元素刚好等于弹出序列中当前索引对应的元素,弹栈
最后如果栈为空,代表该序列是该栈的一个弹出顺序;否则不是

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        //新建一个栈模拟整个过程
        Stack<Integer> stack = new Stack();
        //记录弹栈的索引
        int popindex = 0;
        for(int i=0;i<pushed.length;i++){
            stack.push(pushed[i]);
            //如果当前栈不为空且当前栈顶元素等于出栈队列中当前索引的对应元素就出栈
            while(!stack.isEmpty() && stack.peek()==popped[popindex]){
                stack.pop();
                popindex++;
            }
        }
        return stack.isEmpty();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。...
    阿星啊阿星阅读 1,293评论 0 0
  • 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数...
    小刘一定要努力阅读 1,573评论 0 0
  • 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...
    上行彩虹人阅读 942评论 0 0
  • 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不...
    人一己千阅读 606评论 0 0
  • 题目31:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序。假...
    stoneyang94阅读 2,187评论 0 0