AB2 栈的压入、弹出序列

描述

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

  1. 0<=pushV.length == popV.length <=1000

  2. -1000<=pushV[i]<=1000

  3. 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

代码:

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型一维数组
* @param pushVLen int pushV数组长度
* @param popV int整型一维数组
* @param popVLen int popV数组长度
* @return bool布尔型
*/
// 判断栈是否为空
#include <stdbool.h>
#include <stdio.h>
bool isEmpty(int top) {
if (top == 0) {
return true;
} else {
return false;
}
}
// 取栈顶元素,且不再使用
int GetTop(int* SqStack, int top) {
return SqStack[top - 1];
}
// 入栈
void Push(int* SqStack, int* top, int e) {
SqStack[(*top)++] = e;
}
// 出栈
void Pop(int* SqStack, int* top) {
(*top)--;
}
bool IsPopOrder(int* pushV, int pushVLen, int* popV, int popVLen ) {
// write code here
// 定义一个顺序栈
int SqStack[pushVLen];
int top = 0;
int i = 0; // 遍历入栈数组
int j = 0; // 遍历出栈数组
for (i = 0; i < pushVLen; i++) {
// 入栈
Push(SqStack, &top, pushV[i]);
// 判断栈顶元素是否和出栈数组当前元素相等,如果相等,则出栈直至栈顶元素与出栈数组当前元素不相等,然后继续外层for循环,即下一个入栈数组的元素入栈
// 当栈不是空的时候,检查栈顶元素与出栈数组当前元素是否相等。前提是栈不是空。
// 牛客的检查比VS2022更严格,如果栈为空却取栈顶元素,牛客会报错而VS2022不会
while (top >= 1 && GetTop(SqStack, top) == popV[j]) {
// 出栈
Pop(SqStack, &top);
// 指向下一个出栈数组的元素
++j;
}
}
// for循环结束后,如果栈中元素不为空,说明不能按照这个顺序出栈,打印false,否则打印true
if (isEmpty(top)) {
return true;
} else {
return false;
}
}
posted @   有空  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示