【Leetcode】946. Validate Stack Sequences(剑指offer)

204 阅读1分钟

题目地址: leetcode.com/problems/va…

给定一个入栈序列,再给定另一个序列,问其是否可能是一个合法的出栈序列。题目保证入栈序列数字彼此不同。

思路是直接用一个栈去模拟。先将入栈序列里的数入栈,然后中途如果发现栈顶等于了出栈序列里的值,则不停出栈。看最后操作完之后栈是否为空,若非空则说明序列不是合法的出栈序列。代码如下:

import java.util.ArrayDeque;
import java.util.Deque;

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Deque<Integer> stack = new ArrayDeque<>();
        int idx = 0;
        for (int i : pushed) {
            stack.push(i);
            // 一旦发现栈顶可以出栈的时候就立即出栈,同时移动popped的指针
            while (!stack.isEmpty() && stack.peek() == popped[idx]) {
                stack.pop();
                idx++;
            }
        }
        
        return stack.isEmpty();
    }
}

时间复杂度O(n)。

相关链接:

(38条消息) 【Leetcode】946. Validate Stack Sequences_记录算法题解的博客-CSDN博客

图解算法数据结构 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台