zoukankan      html  css  js  c++  java
  • 【剑指offer】栈的压入、弹出序列

    题目描述

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

    分析:

    采用栈模拟其压入顺序,当栈顶元素为当前出栈元素的话,将当前栈顶元素出栈,否则一直压入需要入栈的元素,最后判断栈是否为空,栈空泽代表出栈和入栈顺序的匹配的,注意及时跳出循环

    class Solution {
    public:
    bool IsPopOrder(vector<int> v1,vector<int> v2)
    {
        stack<int> s;
        int n1=v1.size();
        int n2=v2.size();
        if(n1==0||n2==0)
            return false;
    
        int c=0;
        for(int i=0;i<n2;i++)
        {
            while(s.empty()||s.top()!=v2[i])
            {
                s.push(v1[c++]);
                if(c>n1)
                    return false;
            }
            s.pop();
        }
        if(s.empty())
            return true;
        return false;
    }
    };
  • 相关阅读:
    exe4j的使用
    java线程生命周期及其对应方法
    自动登录开心网
    java小知识点
    java工具类目录
    java 上传图片
    eclipse+svn
    maven
    读propert文件
    hadoop学习
  • 原文地址:https://www.cnblogs.com/yinbiao/p/11571247.html
Copyright © 2011-2022 走看看