首页 > 其他分享 >洛谷题单指南-线性表-P4387 【深基15.习9】验证栈序列

洛谷题单指南-线性表-P4387 【深基15.习9】验证栈序列

时间:2024-03-12 17:58:25浏览次数:20  
标签:出栈 线性表 int 洛谷题 堆栈 序列 15 P4387 入栈

原题链接:https://www.luogu.com.cn/problem/P4387

题意解读:判断一组序列入栈后,出栈序列的合法性。

解题思路:

数据长度100000,直接模拟堆栈的入栈和出栈即可

遍历每一个入栈元素,依次入栈,

每一个元素入栈后,比较栈顶元素和出栈序列第一个,

如果相等,则出栈,持续进行比较、出栈直到不相等或者堆栈空,

最后,如果堆栈空,表示出栈序列有效,否则表示无效。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;

int a[N]; //入栈序列
int b[N]; //出栈序列

int t, n;

int main()
{
    cin >> t;
    while(t--)
    {
        stack<int> stk;
        cin >> n;
        for(int i = 1; i <= n; i++) cin >> a[i];
        for(int i = 1; i <= n; i++) cin >> b[i];
        int j = 1;
        for(int i = 1; i <= n; i++)
        {
            stk.push(a[i]); //依次按入栈序列入栈
            while(stk.size() && stk.top() == b[j]) //如果栈顶元素等于出栈序列第一个,持续出栈
            {
                stk.pop(); //栈顶弹出
                j++; //出栈序列指针移到下一个
            }
        }
        if(stk.empty()) cout << "Yes" << endl; //堆栈为空则说明出栈序列合法
        else cout << "No" << endl;
    }

    return 0;
}

 

标签:出栈,线性表,int,洛谷题,堆栈,序列,15,P4387,入栈
From: https://www.cnblogs.com/jcwy/p/18068870

相关文章

  • 【算法】【线性表】【数组】在排序数组中查找元素的第一个和最后一个位置
    1 题目给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,......
  • 15. 三数之和c
    回溯写了个超时了。这里写得树层去重还是值得借鉴得。/***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecaller......
  • 7-15 报数(留个题目,还没写代码)
    7-15报数分数10作者王秀单位福州大学输入两个正整数n和m((1<m<n<=50)),有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数m的人退出圈子,下一个人从1开始重新报数,报数m的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号......
  • 洛谷题单指南-线性表-P1241 括号序列
    原题链接:https://www.luogu.com.cn/problem/P1241题意解读:括号配对问题,直观上是堆栈的应用。关键的匹配策略是读懂该句:考察它与它左侧离它最近的未匹配的的左括号。解题思路:本题所需核心数据结构是堆栈,由于要实现从栈顶找到第一个未匹配的左括号,所以堆栈中只存所有左括号。从......
  • 15_模板模式
    模板模式是一种行为型设计模式,它定义了一个抽象类作为算法的骨架,而将一些步骤的具体实现延迟到子类中。模板模式提供了一个统一的算法流程,但允许子类根据需要重写算法的具体步骤。模板模式有三个主要角色:抽象类(AbstractClass):定义了算法的骨架,包含了一个模板方法以及一些抽象......
  • 洛谷题单指南-线性表-P2058 [NOIP2016 普及组] 海港
    原题链接:https://www.luogu.com.cn/problem/P2058题意解读:计算24小时时间窗口内不同国家的数量,是队列的典型应用。解题思路:本题需要用到两个关键的数据结构:队列、数组队列用来保存24小时内到达的船的时间,数组用来保存24小时内每个国家有多少人每到一只船,需要把时间放入队列,如......
  • 洛谷题单指南-线性表-P1540 [NOIP2010 提高组] 机器翻译
    原题链接:https://www.luogu.com.cn/problem/P1540题意解读:本题模拟内存的调入调出,内存先入先出的特性就是队列。解题思路:本题需要两种数据结构:队列、数组队列用来模拟内存的操作,数组充当hash表用于判断单词在内存是否存在核心逻辑:对于每一个单词,如果内存不存在,查一次词典,再将......
  • 【算法】【线性表】【链表】合并 K 个升序链表
    1 题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1-......
  • 洛谷题单指南-线性表-P1160 队列安排
    原题链接:https://www.luogu.com.cn/problem/P1160题意解读:本题是双向链表的模拟题,要快速实现M个节点的删除,用数组模拟链表是最佳做法。解题思路:双向链表关键要实现好两个操作:voidadd(intk,intv);//在第k个节点后增加第v的号节点,即在k号同学右边插入v号同学voiddel(int......
  • redis自学(15)IO多路复用
     无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案: 如果调用recvfrom时,恰好没有数据,阻塞IO会使进程阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用。 如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并......