题目链接
栈排序
题目描述
注意点
- 对栈进行排序使最小元素位于栈顶
- 最多只能使用一个其他的临时栈存放数据
- 不得将元素复制到别的数据结构(如数组)中
- 栈中的元素数目在[0, 5000]范围内
解答思路
- 本题是要实现一个小顶堆,可以直接使用PriorityQueue
- 如果要使用栈完成该结构,则需要在入栈时对栈中元素进行排序:如果入栈的val比栈顶元素小,则直接将val加入到栈中;如果入栈的val比栈顶元素大,则需要先将栈中元素弹出并存储,直到val比栈顶元素小为止,然后将val加入到栈中,再将弹出的栈中元素按顺序添加到栈中(保证栈中的元素始终按从小到大进行排序)
代码
class SortedStack {
Stack<Integer> stk;
public SortedStack() {
stk = new Stack<>();
}
public void push(int val) {
List<Integer> list = new ArrayList<>();
while (!stk.isEmpty() && val > stk.peek()) {
list.add(stk.pop());
}
stk.push(val);
for (int i = list.size() - 1; i >= 0; i--) {
stk.push(list.get(i));
}
}
public void pop() {
if (!stk.isEmpty()) {
stk.pop();
}
}
public int peek() {
return stk.isEmpty() ? -1 : stk.peek();
}
public boolean isEmpty() {
return stk.isEmpty();
}
}
关键点
- 无