【牛客刷题专栏】0x29:JZ31 栈的压入、弹出序列(C语言编程题)

news/2024/7/7 11:55:45 标签: c语言, 数据结构, 算法

前言

  • 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失
  • 个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

目录

  • 前言
  • 问题描述:
  • 举例:
  • 解法思路:
  • 代码结果:
  • 结束语


问题描述:

  • 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
    1. 0<=pushV.length == popV.length <=1000
    1. -1000<=pushV[i]<=1000
    1. pushV 的所有数字均不相同

举例:

//示例1:
//输入:
[1,2,3,4,5],[4,5,3,2,1]
//返回值:
true
//说明:可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop()这样的顺序得到[4,5,3,2,1]这个序列,返回true
//=========================
//示例2:
//输入:
[1,2,3,4,5],[4,3,5,1,2]
//返回值:
false
//说明:说明:由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false 

解法思路:

  • 建立一个辅助栈,开始时,指针分别指向入栈数组pushV和出栈数组popV第一个元素,再让与当前出栈数组元素对应的入栈数组元素前的所有数入栈。此时栈顶元素与出栈数组元素相等,让栈顶元素出栈、出栈数组指针后移,继续判断直到不等。重复上述过程,直到入栈数组和出栈数组访问完毕,判断此时栈内是否还有元素。时间复杂度O(n),空间复杂度O(n)。

代码结果:

#include <stdbool.h>
bool IsPopOrder(int* pushV, int pushVLen, int* popV, int popVLen ) {
    // write code here
    int stack[pushVLen],top=-1,top_in=0,top_out=0;//建立辅助栈stack,top为栈顶指针,top_in为入栈数组pushV的指针,top_out为出栈数组popV的指针
    while(top_in<pushVLen && top_out<pushVLen){
        while(top_in<pushVLen && pushV[top_in]!=popV[top_out]){
            //与当前出栈数组元素对应的入栈数组元素前的所有数入栈
            stack[++top]=pushV[top_in++];
        }
        stack[++top]=pushV[top_in++];
        while(top>-1 && stack[top]==popV[top_out]){
            //栈顶元素若与出栈数组元素相等就出栈
            top--;
            top_out++;
        }
    }
    if(top!=-1){//栈不为空匹配失败
        return false;
    }
    return true;
}    


结束语

  • 以上就是该C语言编程题的内容。可以在牛客尝试刷几道题目来练习实践。牛客网刷题(点击可以跳转),可以尝试注册使用。
  • 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

http://www.niftyadmin.cn/n/349371.html

相关文章

物联网时代,从智能咖啡机到车联网都可能被黑!

"伴随5G明年即将正式商转&#xff0c;物联网(IoT)时代特有的“万物皆联网”景况也近在咫尺&#xff0c;届时x连网对象数量将呈现猛爆增长。物联网技术的前期采用者&#xff0c;除了加速物联网基础建设与创新技术应用导入之外&#xff0c;也面临更广泛的安全管理风险与更严…

uni-app之使用App.vue全局文件的教学

在 UniApp 中&#xff0c;App.vue 是整个应用的入口文件&#xff0c;它可以作为一个全局文件&#xff0c;在其中定义的数据、方法和生命周期钩子可以在整个应用中使用。这篇文章将向您介绍如何使用 App.vue 文件来实现全局信息的共享和管理。 步骤&#xff1a; 创建 App.vue 文…

《WEB安全漏洞30讲》(第5讲)任意文件上传漏洞

1.任意文件上传漏洞原理 文件上传漏洞,指攻击者利用程序缺陷绕过系统对文件的验证与处理策略将恶意程序上传到服务器并获得执行服务器端命令的能力。 这个漏洞其实非常简单,就是攻击者给服务器上传了恶意的木马程序,然后利用此木马程序执行操作系统命令,从而获得服务器权…

大数据课程-学习二十周总结

4.2.10.hive表中的数据导出 将hive表中的数据导出到其他任意目录&#xff0c;例如linux本地磁盘&#xff0c;例如hdfs&#xff0c;例如mysql等等 4.2.10.1.insert导出 1&#xff09;将查询的结果导出到本地 insert overwrite local directory ‘/export/data/exporthive’ sel…

初识编程过程

和电脑对话 电脑是什么? 一堆电子原器件的集合, 怎么和它交流, 使用鼠标、键盘点击显示器上的内容。 那么这些内容是如何显示&#xff0c;又是如何工作的&#xff0c;他们怎么知道鼠标点某个位置时要如何响应&#xff0c;响应的内容又是怎么呈现出来。 这些都是和电脑正常对…

前端食堂技术周刊第 83 期:TS 5.1 RC、Nuxt 3.5、INP、Kinp、管理 GitHub 通知、WebXR

By Midjournery 美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;杏花乌龙拿铁 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 TypeScript 5.1 RCNuxt 3.5INP 将成为新的 Core Web…

vector的介绍

vector的介绍&#xff1a;(vector翻译是向量&#xff0c;但是表示的是顺序表) vector是表示可以改变大小的数组的序列容器。 就像数组一样&#xff0c;vector对其元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针上的偏移量来访问它们的元素&#xf…

Spring面试整理

什么是Spring&#xff1f; Spring的优缺点&#xff1f; Spring的模块组成 Spring框架中使用了哪些设计模式&#xff1f; 详细讲解下核心容器&#xff08;Spring context&#xff09;模块 Spring框架中有哪些不同类型的组件 Spring控制反转&#xff08;IOC&#xff09; 什…