題目描述
請編寫一個程序,按升序對棧進行排序(即最大元素位於棧頂),要求最多隻能使用一個額外的棧存放臨時數據,但不得將元素複製到別的數據結構中。
給定一個int[] numbers(C++中爲vector<int>),其中第一個元素爲棧頂,請返回排序後的棧。請注意這是一個棧,意味着排序過程中你只能訪問到第一個元素。
[1,2,3,4,5]
返回:[5,4,3,2,1]
class TwoStacks {
public:
vector<int>twoStacksSort(vector<int>numbers)
{
vector<int>tmpStack;
while(!numbers.empty())
{
int tmpVal=numbers.back();
numbers.pop_back();
if (tmpStack.empty())
{
tmpStack.push_back(tmpVal);
}
else
{
if(tmpVal<tmpStack.back())
{
while(!tmpStack.empty()&&tmpStack.back()>tmpVal)
{
numbers.push_back(tmpStack.back());
tmpStack.pop_back();
}
}
tmpStack.push_back(tmpVal);
}
}
numbers.clear();
while(!tmpStack.empty())
{
numbers.push_back(tmpStack.back());
tmpStack.pop_back();
}
return numbers;
}
};