請編寫一個程序,按升序?qū)_M(jìn)行排序(即最大元素位于棧頂),要求最多只能使用一個額外的棧存放臨時數(shù)據(jù),但不得將元素復(fù)制到別的數(shù)據(jù)結(jié)構(gòu)中。 給定一個int[] numbers(C++中為vector),其中第一個元素為棧頂,請返回排序后的棧。請注意這是一個棧,意味著排序過程中你只能訪問到第一個元素。 測試樣例: [1,2,3,4,5] 返回:[5,4,3,2,1] 思路非常簡單,利用一個輔助棧,每次比較排序棧和輔助棧的頂元素,如果排序棧較小直接壓入輔助棧,并彈出排序棧,否則將輔助棧的元素彈出并壓在排序棧棧頂元素的后面。知道排序棧沒有元素了,之后將輔助棧的元素全部導(dǎo)入排序棧,就完成排序。
class TwoStacks {public: vector<int> twoStacksSort(vector<int> numbers) { stack<int> mystack,help; for(auto i=numbers.end()-1;i>=numbers.begin();--i) mystack.push(*i); while(!mystack.empty()) { if(help.empty()){ help.push(mystack.top()); mystack.pop(); } else if(mystack.top()<=help.top()) { help.push(mystack.top()); mystack.pop(); } else { int temp=mystack.top(); mystack.pop(); mystack.push(help.top()); mystack.push(temp); help.pop(); } } while(!help.empty()) { mystack.push(help.top()); help.pop(); } for(auto &c:numbers) { c=mystack.top(); mystack.pop(); } return numbers; }};新聞熱點
疑難解答