• 【剑指Offer】面试题31. 栈的压入、弹出序列


    题目

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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 之前弹出。
    

    提示:

    • 0 <= pushed.length == popped.length <= 1000
    • 0 <= pushed[i], popped[i] < 1000
    • pushed 是 popped 的排列。

    本题同【LeetCode】946. 验证栈序列

    思路

    将入栈序列的每个元素入栈,如果栈顶元素等于出栈序列当前poped[i]元素,则弹出栈元素并移动出栈序列(++i),最后如果栈为空,则有效。

    代码

    时间复杂度:O(n)
    空间复杂度:O(n)

    class Solution {
    public:
        bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {                
            stack<int> st;
            int i = 0;
            for (int n : pushed) {
                st.push(n);           
                while (!st.empty() && st.top() == popped[i]) {
                    st.pop();
                    ++i;
                }            
            }
            return st.empty();
        }
    };
    
  • 相关阅读:
    如何实现shell并发 一个入门级可控多线程shell脚本方案
    Android SDK 开发指南
    Android SDK上手指南:知识测试
    JavaScript apply
    chrome 调试
    jQuery file upload上传图片出错分析
    jQuery插件开发
    yarn
    What is 'typeof define === 'function' && define['amd']' used for?
    jQuery .closest()
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12500538.html
Copyright © 2020-2023  润新知