问题描述
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
给定一个int[] nums(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到最后一个元素。
- 测试样例:
Input: [1,3,2,5,4]
Output: [5,4,3,2,1]
有没有感觉到,这个很像汉诺塔问题?如下图所示。只不过,这里要求中转的柱子上(TOWER 2)最多只能有一个圆盘。
废话不多说,直接上代码
Java代码
private static List<Integer> solution(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = nums.length - 1; i >= 0; ) {
int temp = nums[i];
if (list.size() < 1 || temp <= list.get(list.size() - 1)) {
list.add(temp);
i--;
} else {
nums[i] = list.remove(list.size() - 1);
while (temp > list.get(list.size() - 1)) {
i++;
nums[i] = list.remove(list.size() - 1);
if (list.size() == 0) break;
}
list.add(temp);
}
}
return list;
}