题目链接
栈排序
题目描述
注意点
- 对栈进行排序使最小元素位于栈顶
- 最多只能使用一个其他的临时栈存放数据
- 不得将元素复制到别的数据结构(如数组)中
- 栈中的元素数目在[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();}
}
关键点
- 无