牛客题霸 [栈和排序] C++题解/答案

牛客题霸 [栈和排序] 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;
    }
};
posted @ 2020-12-02 18:21  回归梦想  阅读(183)  评论(0编辑  收藏  举报