leetcode946. 验证栈序列

leetcode946. 验证栈序列
在这里插入图片描述
模拟栈的操作,用辅助数组a记录元素在不在栈中,当a[i]为1是表示元素i在栈中,当a[i]为0时表示元素i不在栈中。遍历弹出序列的数组popped,当遇到该元素不在栈中的时候,根据入栈序列pushed依次把元素入栈,直到该元素入栈;如果该元素已经在栈中,则判断栈顶元素是否为该元素,如果不是,则序列非法;如果是,则让该元素出栈。

bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize){
    int stack[1000];//栈
    int a[1000];//辅助数组,判断元素在不在栈中
    int top=-1;//栈顶指针
    int i=0,j=0;
    memset(a,0,sizeof(a));
    for(int j=0;j<poppedSize;j++){
        while(!a[popped[j]]){//不在栈中
            //持续入栈直到元素在栈中
            stack[++top]=pushed[i];
            a[pushed[i++]]=1;
        }
        if(stack[top]!=popped[j])//如果栈顶元素不是当前需要出栈的元素
            return false;//序列非法
        a[stack[top--]]=0;//出栈
    }
    return true;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值