【无标题】判断是否能按规定顺序出栈

给出一个由1到n组成的无序数列,如果我们把这个序列看成是数字1~n出栈的顺序,并且入栈顺序是1, 2, 3, ..., n,请问操作时,栈内最多能有多少个元素?

看这个题,因为这些数的入栈顺序一定是1~n,所以你要取出某个数,就得把比它小的数一次放进去,并且你放入的数一定要比去除的数大,否则无法完成入栈和出栈.

首先,将和第一数相等以及小于它的数依次入栈,判断入栈个数,记录下来,用max标记。然后将该数取出,再判断接下来的数是否和栈中后面的数相等,相等就输出,不相等就再放入比这数小的数字,再记录个数,和之前的max标记的数比较,找到大的数。如果最后数组最后的下标和之前的坐标相同,说明能得到答案,否则不行。

#include<stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int i,a[105],b[105];
        int head=1,tail=1;//让数组为空
        for(i=0; i<n; i++)
        {
            for(; k<=a[i]; k++)
                b[tail++]=k;//入栈
            // printf("%d %d %d  ",tail,k,b[tail-1]);
            // printf("\n");
            if(tail>t)
                t=tail;//最小的栈
            // printf("%d\n",tail);
            if(b[tail-1]==a[i])
                tail--;//满足条件,出栈
        }
        if(tail==1)
            printf("%d\n",t-1);
        else
            printf("-1\n");
    }
        return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值