您的位置:首页 > 职场人生

程序员面试金典题解 双栈排序

2016-07-10 16:04 381 查看
题目描述

请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。

给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。

测试样例:

[1,2,3,4,5]

返回:[5,4,3,2,1]


import java.util.*;

public class TwoStacks {
public ArrayList<Integer> twoStacksSort(int[] numbers) {
Stack<Integer> left=new Stack();
ArrayList<Integer> right=new ArrayList();
for(int i=numbers.length-1;i>=0;i--){
left.push(numbers[i]);
}
while(!left.empty()){
int temp=left.pop();
while(!right.isEmpty()&&temp<right.get(0)){
left.push(right.remove(0));
}
right.add(0,temp);
}
return right;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: