zoukankan      html  css  js  c++  java
  • 0946. Validate Stack Sequences (M)

    Validate Stack Sequences (M)

    题目

    Given two sequences pushed and popped with distinct values, return true if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.

    Example 1:

    Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
    Output: true
    Explanation: We might do the following sequence:
    push(1), push(2), push(3), push(4), pop() -> 4,
    push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
    

    Example 2:

    Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
    Output: false
    Explanation: 1 cannot be popped before 2.
    

    Constraints:

    • 0 <= pushed.length == popped.length <= 1000
    • 0 <= pushed[i], popped[i] < 1000
    • pushed is a permutation of popped.
    • pushed and popped have distinct values.

    题意

    给定一个栈的入栈顺序表和出栈顺序表,判断能否实现对应的出入栈操作(符合先进后出)。

    思路

    贪心+模拟。维护一个栈,当栈顶元素和出栈表的下一个元素相同时,立即出栈;否则压入入栈表的下一个元素。反证法证明正确性:栈中元素都不相同,记当前出栈表的第一个元素为x,如果栈顶元素也为x,且选择不出栈,那么x必然不会成为第一个出栈的元素,矛盾。


    代码实现

    Java

    class Solution {
        public boolean validateStackSequences(int[] pushed, int[] popped) {
            Deque<Integer> stack = new ArrayDeque<>();
            int i = 0, j = 0;
            
            while (j < popped.length) {
                if (i == pushed.length && stack.peek() != popped[j]) return false;
    
                if (stack.isEmpty() || stack.peek() != popped[j]) {
                    stack.push(pushed[i++]);
                } else {
                    stack.pop();
                    j++;
                }
            }
            
            return true;
        }
    }
    
  • 相关阅读:
    验车流程
    WLK毁灭术士天赋图及输出手法
    一个类型集合操作SYS_REFCURSOR的例子
    关于法师真正的输出手法个人观点
    FS技能快界键的设置
    MODEL函数的简单用法。
    kevin的黎明十分
    Android9.0动态运行时权限源码分析及封装改造<四>打造自己的权限申请框架下
    电子书资源
    批量消除图片的杂色背景
  • 原文地址:https://www.cnblogs.com/mapoos/p/14454269.html
Copyright © 2011-2022 走看看