题目链接
堆盘子
题目描述
注意点
- SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈
解答思路
- 将多个栈存储到一个List中,当入栈时,如果List中最后一个栈容量已经达到cap,则需要新建一个栈,将元素推到新栈中,并将新栈添加到List中;当出栈时,如果List中最后一个栈只有一个元素,当该元素出栈后,变为空栈,需要将该栈从List中移除
代码
class StackOfPlates {int cap;List<Deque> list;public StackOfPlates(int cap) {this.cap = cap;list = new ArrayList<>();}public void push(int val) {if (cap == 0) {return;}if (list.isEmpty() || list.get(list.size() - 1).size() >= cap) {Deque<Integer> deque = new ArrayDeque<>();deque.push(val);list.add(deque);} else {Deque<Integer> deque = list.get(list.size() - 1);deque.push(val);}}public int pop() {if (list.isEmpty()) {return -1;}Deque<Integer> deque = list.get(list.size() - 1);int res = deque.pop();if (deque.isEmpty()) {list.remove(list.size() - 1);}return res;}public int popAt(int index) {if (index >= list.size()) {return -1;}Deque<Integer> deque = list.get(index);int res = deque.pop();if (deque.isEmpty()) {list.remove(index);}return res;}
}
关键点
- 注意边界问题
- 注意cap为0的情况