class Solution { public: /** * 栈排序 * @param a int整型一维数组 描述入栈顺序 * @param aLen int a数组长度 * @return int整型vector */ vector<int> solve(int* a, int n) { // write code here stack<int> stk; vector<int> res; vector<int> vis(n + 1, false); //将已入栈的较大元素标记 int now = n; //当前应当出栈对元素,n一定是第一个出栈的元素 for(int i = 0; i < n; i ++){ stk.push(a[i]); vis[a[i]] = true; while(now > 0 && vis[now]) now --; //应当出栈的为>=n的元素 while(!stk.empty() && stk.top() >= now){ res.push_back(stk.top()); stk.pop(); } } while(!stk.empty()){ res.push_back(stk.top()); stk.pop(); } return res; } };