【程序员面试经典】Leetcode 面试题 03.03. 堆盘子
题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/527d879abaae6761c04eab8bcb0d354b.png)
思路
- 新建 一个List 存放多个栈
- 每次push元素 检查一下 list有没有栈 或者 最后一个栈是不是还有空间
- 如果可以push 将元素push进入最后一个栈中
- 每次pop元素 将最后一个栈中的元素pop出去 如果最后一个栈空,直接移除该栈
代码
class StackOfPlates {
private List<Stack<Integer>> stackList;
private int cap;
public StackOfPlates(int cap) {
stackList = new ArrayList<>();
this.cap = cap;
}
public void push(int val) {
if(cap <= 0){
return ;
}
if(stackList.isEmpty() || stackList.get(stackList.size() - 1).size() == cap){
Stack<Integer> stack = new Stack<>();
stack.push(val);
stackList.add(stack);
return;
}
stackList.get(stackList.size() - 1).push(val);
}
public int pop() {
return popAt(stackList.size() - 1);
}
public int popAt(int index) {
if(index < 0 || index >= stackList.size()){
return -1;
}
Stack<Integer> s = stackList.get(index);
if(s.isEmpty())
{
return -1;
}
int res = s.pop();
if(s.isEmpty()){
stackList.remove(index);
}
return res;
}
}