牛客题霸 [栈和排序] C++题解/答案
题目描述
给你一个1->n的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列
题解:
栈的性质是先进后出
当栈中元素大于还没进栈的最大元素时,就存入vector,并弹出栈
maxnum用来记录元素是否入过栈
代码:
class Solution {
public:
/**
* 栈排序
* @param a int整型一维数组 描述入栈顺序
* @param aLen int a数组长度
* @return int整型vector
*/
vector<int> solve(int* a, int aLen) {
// write code here
if(aLen==0)return vector<int>();
stack<int> st;
vector<int> maxNum(aLen + 1,1);
int pos = aLen;
vector<int> res;
for(int i=0;i<aLen;i++){
st.push(a[i]);
maxNum[a[i]] = 0;
while(maxNum[pos] == 0){
pos--;
}
while(st.size() > 0 && st.top() > pos){
res.push_back(st.top());
st.pop();
}
}
return res;
}
};