题目:请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构 中。
给定一个int[ ] number(C++中为vector),其中第一个元素为栈顶,请返回排序后的栈。
测试样例:
【1,2,3,4,5】
返回:
【5,4,3,2,1】
class TwoStacks {
public:
vector<int> twoStacksSort(vector<int> numbers) {
// write code here
int size = numbers.size();
stack<int>s;
stack<int>tmp;
vector<int> res;
for (int i = size - 1; i >= 0; i--)
s.push(numbers[i]);
while (!s.empty())
{
int top = s.top();
s.pop();
if (tmp.empty() || top <= tmp.top())
tmp.push(top);
else{
while (!tmp.empty() && top>tmp.top())
{
s.push(tmp.top());
tmp.pop();
}
tmp.push(top);
}
}
while (!tmp.empty())
{
s.push(tmp.top());
tmp.pop();
}
while (!s.empty())
{
res.push_back(s.top());
s.pop();
}
return res;
}
};