题解 | #栈和排序#

栈和排序

https://www.nowcoder.com/practice/95cb356556cf430f912e7bdf1bc2ec8f?tpId=117&tqId=37839&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D3%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D117&difficulty=undefined&judgeStatus=undefined&tags=&title=

class Solution {
public:
    /**
     * 栈排序
     * @param a int整型一维数组 描述入栈顺序
     * @param aLen int a数组长度
     * @return int整型vector
     */
    vector<int> solve(vector<int> &nums) {
        // write code here
        unordered_set<int> set;
        stack<int> st;
        vector<int> ans;
        int n = nums.size();
        ans.reserve(n);
        int index = n;

        for (const auto &a : nums) {
            st.push(a);
            if ((set.count(index) == false) && a != index) {
                set.insert(a);
                continue;
            }

            while (!st.empty() && st.top() == index) {
                ans.emplace_back(st.top());
                set.erase(st.top());
                st.pop();
                while (set.count(--index) == true && st.top() != index);
            }
        }
        while (!st.empty()) {
            ans.emplace_back(st.top());
            st.pop();
        }

        return ans;
    }
};

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务