给出一个由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;
}