快被牛客的这道题坑死了!!!
按照自己的思路试了好久都不行,还因为题目里要求的最后不能有空格导致我写的极为复杂,后来发现有没有空格根本不影响啊这!!!而且牛客里面很多人写的题解看起来就不对,果不其然,一测居然一个测试点都没过。。。。。
下面的代码,改了好几遍,重写了2遍,最后居然只能过一个测试点,想不通为啥啊!!!
//这代码是错的,希望有大佬能指正下我,为啥他不对
#include<bits/stdc++.h>
using namespace std;
stack<int> a;
int main(){
int n;
cin>>n;
int ans=n;
for(int i=1;i<=n;i++)
{
int tmp;
bool flag=0;
cin>>tmp;
if(tmp == ans)
{
cout<<tmp<<" ";
ans--;
flag=1;
}
while(!a.empty() && a.top() == ans)
{
cout<<a.top()<<" ";
a.pop();
ans--;
}
if(!flag) a.push(tmp);
}
while(!a.empty())
{
cout<<a.top()<<" ";
a.pop();
}
return 0;
}
最后无奈的参照AC的代码自己写了下,它居然还没用栈。。。。。
复现时,发现一个极易写错的地方,就是ans[dp]很可能就会写出a[i],而且还会和我一样,百思不得其解,为啥啊!不是一样的嘛!!
while啊!!!不是if!!!第一次一样,后面还一样???
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int a[maxn],ma[maxn],ans[maxn];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n;i>0;i--)
{
ma[i]=max(ma[i+1],a[i]); //记录i->n的最大值
}
int dp=0;
for(int i=1;i<=n;i++)
{
ans[++dp]=a[i];
while(dp && ans[dp]>ma[i+1])//ans[dp]不能写出a[i],下同
{
cout<<ans[dp]<<" ";
dp--;
}
}
return 0;
}