题解 | #栈和排序#
栈和排序
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; } };