牛客题霸 [栈和排序] 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;
    }
};