題目:
請編寫一個程序,按升序對棧進行排序(即最大元素位於棧頂),要求最多隻能使用一個額外的棧存放臨時數據,但不得將元素複製到別的數據結構中。
給定一個int[] numbers(C++中爲vector<int>),其中第一個元素爲棧頂,請返回排序後的棧。請注意這是一個棧,意味着排序過程中你只能訪問到第一個元素。
思路:
代碼實現:
class TwoStacks {
public:
vector<int> twoStacksSort(vector<int> numbers) {
// write code here
if(numbers.size() == 0 || numbers.size() == 1)
return numbers;
vector<int> result;
int tmp;
result.push_back(numbers.back());
numbers.pop_back();
while(!numbers.empty())
{
tmp = numbers.back();
numbers.pop_back();
while(tmp < result.back())
{
numbers.push_back(result.back());
result.pop_back();
}
result.push_back(tmp);
}
while(!result.empty())
{
numbers.push_back(result.back());
result.pop_back();
}
return numbers;
}
};