剑指--栈的压入、弹出序列

    技术2024-08-19  56

    剑指–栈的压入、弹出序列

    1,题目:

    2,思路:

    思路: 1.入栈操作: 按照压栈序列的顺序执行。

    2.出栈操作: 每次入栈后,循环判断 “栈顶元素 == 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。

    算法流程:

    1.初始化: 辅助栈 stack ,弹出序列的索引 i ;2.遍历压栈序列: 各元素记为 num ;3.元素 num 入栈;4.循环出栈:若 stack 的栈顶元素 == 弹出序列元素 popped[i] ,则执行出栈与 i++ ;5.返回值: 若 stack 为空,则此弹出序列合法。

    下面是对应的图解:

    3,代码:

    class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { /* 1.入栈操作: 按照压栈序列的顺序执行。 2.出栈操作: 每次入栈后,循环判断 “栈顶元素 == 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。 算法流程: 1.初始化: 辅助栈 stack ,弹出序列的索引 i ; 2.遍历压栈序列: 各元素记为 num ; 3.元素 num 入栈; 4.循环出栈:若 stack 的栈顶元素 == 弹出序列元素 popped[i] ,则执行出栈与 i++ ; 5.返回值: 若 stack 为空,则此弹出序列合法。 */ Stack<Integer> stack = new Stack<>(); int i = 0; for(int num : pushed) { stack.push(num); // num 入栈 while(!stack.isEmpty() && stack.peek() == popped[i]) { // 循环判断与出栈 stack.pop(); i++; } } return stack.isEmpty(); } }
    Processed: 0.011, SQL: 9