题目:
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。
/*
解题思路:遍历数组,如果集合为空,则把数组中的元素直接加入到数组中,如果集合末尾的元素大于数组的元素,则直接将数组元素加入集合中,
如果集合末尾的元素大于数组元素,则遍历集合找到小于数组的那个元素,并且在那个元素的后一位添加数组元素
*/
public ArrayList<Integer> twoStacksSort(int[] numbers) {
ArrayList<Integer> array=new ArrayList<Integer>();int index=-1;//用于标记最末尾的那个位置,该位置上的数是最小的
for(int i=0;i<numbers.length;i++){
if(array.size()==0||array==null){
array.add(numbers[i]);
index++;
}else if(array.get(index)>numbers[i]){
array.add(numbers[i]);
index++;
}else{
int j=index;
while(j>=0){
if(array.get(j)>numbers[i]){
array.add(j+1,numbers[i]);//这里需要从j+1开始
break;
}
j--;
}
if(j<0){
array.add(0,numbers[i]);
}
index++;//注意这里需要加1
}
}//for
return array;
}