• goj 栈的压入、弹出序列


    Problem Description:

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

    Input:

    输入一个T,表示理面输入T组数据。每组数据第一行为一个数n,接下来有两行n个数字,第一行代表数字进栈的序列,第二行代表数字出栈的序列。(所有数字不大于50)

    Output:

    判断出栈序列能不能由进栈序列产生,如果能输出YES,否则输出NO。

    Sample Input:

    2
    5
    1 2 3 4 5
    4 5 3 2 1
    5
    1 2 3 4 5
    4 3 5 1 2

    Sample Output:

    YES
    NO
    解题思路:借用一个额外的辅助栈 举个栗子: ①入栈Push序列:1,2,3,4,5 ②出栈Pop序列:4,5,3,2,1 遍历压栈顺序,先将第一个放入辅助栈中,这里是1,然后判断辅助栈的栈顶元素是不是出栈Pop顺序的第一个元素,这里是4,很显然1≠4,所以我们继续将元素压入辅助栈中,直到相等后辅助栈就开始出栈,出栈一个(栈顶元素)元素,则将出栈Pop顺序向后移动一位,直到不相等,这样一直循环,直到压栈顺序遍历完成,如果这时辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。 简单模拟一下过程:首先1入辅助栈,此时栈顶1≠4,继续入栈2,此时栈顶2≠4,继续入栈3,此时栈顶3≠4,继续入栈4,此时栈顶4==4,出栈4,弹出序列的位置向后移一位,此时为5,辅助栈里面是1,2,3,此时栈顶3≠5,继续入栈5,此时栈顶5==5,出栈5,弹出序列向后一位,此时为3,辅助栈里面是1,2,3….依次执行,最后判断辅助栈为空,若不为空说明弹出序列不是该栈的弹出顺序。
    AC代码:
     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 bool IsPopOrder(vector<int> Push, vector<int> Pop) {
     5     if(Push.size()==0)return false;
     6     vector<int> vec;//辅助容器
     7     for(size_t i=0,j=0;i<Push.size();++i){
     8         vec.push_back(Push[i]);
     9         while(j<Pop.size()&&Pop[j]==vec.back()){vec.pop_back();j++;}
    10     }
    11     return vec.empty();//如果最后vec容器中元素个数为0,说明出栈序列满足条件,返回true
    12 }
    13 int main(){
    14     vector<int> pushlist;
    15     vector<int> poplist;
    16     int t,n,x;
    17     cin>>t;
    18     while(t--){
    19         pushlist.clear();//清空
    20         poplist.clear();
    21         cin>>n;
    22         for(int i=1;i<=n;++i){cin>>x;pushlist.push_back(x);}
    23         for(int i=1;i<=n;++i){cin>>x;poplist.push_back(x);}
    24         if(IsPopOrder(pushlist, poplist))cout<<"YES"<<endl;
    25         else cout<<"NO"<<endl;
    26     }
    27     return 0;
    28 }
     
  • 相关阅读:
    web前段知识
    如何查看服务器机型,如何查看软件的版本信息
    selenium server启动失败
    性能测试策略
    mysql_列出表中所有字段用逗号做分隔符
    复杂sql(1)
    orale建表查询
    javascript常用函数集
    orale用户角色管理
    数据流
  • 原文地址:https://www.cnblogs.com/acgoto/p/9230988.html
Copyright © 2020-2023  润新知