题目链接
堆盘子
题目描述
注意点
- 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的情况