解题思路
我们利用栈一边输入一边判断,如果两数之间相差1,就往后输入,或者将栈顶元素输出,接着去栈中找前边的元素接着比较就行了。
代码部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<int>s;
int n,t,t1,ans=0;
scanf("%d",&n);
scanf("%d",&t);
s.push(t);
for(int i=2; i<=n; i++)
{
t1=s.top();
scanf("%d",&t);
if(t1-t==1||t1-t==-1)
{
bool flag=true,flag1=true;
while(flag)
{
if(s.empty())
{
break;
}
t1=s.top();
if(t1-t!=1&&t1-t!=-1)
{
break;
}
if(t1<t)
{
ans++;
flag=false;
flag1=false;
}
else
{
ans++;
s.pop();
}
}
if(flag1)
{
s.push(t);
}
}
else
{
s.push(t);
}
}
printf("%d\n",ans);
return 0;
}