leecode946.验证栈序列

本文介绍了一种算法,用于判断给定的两个整数数组是否能通过一系列标准的栈操作匹配。算法首先检查两数组长度是否一致,然后使用辅助数组模拟栈操作过程。如果最后辅助数组为空,则表明操作序列有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题我们首先判断push和pop中元素数目是否相等,

如果不相等直接返回false。

接着创建一个辅助数组a,和指针top、i和k;

让他们分别指向数组a、压入栈和弹出栈。

先将top,i,k初始化为零,即使他们指向栈底。(top指向数组元素的上一个位置)

然后先将push中的第i个元素放入辅助数组a(即a[top++]=push[i++]),

再判断a[top-1]是否与popped[k]相等,

相等的话top下移一个位置(top>0的前提下),k向上移动一个位置。

如果push元素全部传入辅助数组a后top==0;

说明该操作序列可以实现,即返回true;

否则返回false。

具体操作原理如下(以示例二为例):

bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize){
if(pushedSize!=poppedSize)
return false;
int a[pushedSize],top=0,k=0,i=0;
memset(a,0,sizeof(a));
while(i<pushedSize)
{
  a[top++]=pushed[i++];
  while(top>0&&a[top-1]==popped[k]) 
  {
      top--;
      k++;
  }  
}
if(top==0)return true;
else return false;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值