class Solution {
public:
/**
* 栈排序
* @param a int整型一维数组 描述入栈顺序
* @param aLen int a数组长度
* @return int整型vector
*/
vector<int> solve(vector<int> a) {
stack<int>s;//定义一个栈用来存储数据
int aLen=a.size();
int n = aLen;
vector<int>res;//用来返回结果
//方法二
// vector<bool> vis(aLen + 1,false);
vector<int> t(aLen,0);
int temp=-1;
for(int i=aLen-1;i>=0;i--){
temp=max(a[i],temp);
t[i]=temp;//记录后续进栈的最大值
}
// int M=-1;
for(int i=0;i<aLen;i++){//将栈中大于后序的数据先行弹出
while(!s.empty()&&s.top()>t[i]){
res.push_back(s.top());
s.pop();
}
s.push(a[i]);
// vis[a[i]]=true;
if(s.top()==t[i]){
res.push_back(s.top());
s.pop();
}
}
while(!s.empty()){
res.push_back(s.top());
s.pop();
}
return res;
}
};
//方法一
// for(int i=0;i<aLen;i++){
// vis[a[i]]=true;
// s.push(a[i]);
// while(n && vis[n]) n--;
// while(!s.empty() && n <= s.top()){
// //然后将栈中>=n的元素出栈
// res.push_back(s.top());
// s.pop();
// }
// }