1、思路
-
vector
中的每个元素都是stack
,便于进行增加栈和删除栈的操作; -
用这种嵌套的数据结构来实现进阶的
popAt()
方法也很简单,当指定栈为空时erase
掉就好了。
2、代码
class StackOfPlates {
private:
vector<stack<int>> stks;
int capacity;
public:
StackOfPlates(int cap) {
capacity = cap;
}
void push(int val) {
if (capacity == 0) return;
if (stks.empty() || stks.back().size() == capacity)
{ //增加新栈
stks.push_back(stack<int>());
}
stks.back().push(val);
}
int pop() {
if (capacity == 0 || stks.empty()) return -1;
int res = stks.back().top();
stks.back().pop();
if (stks.back().empty())
{ //删除空栈
stks.pop_back();
}
return res;
}
int popAt(int index) {
if (capacity == 0 || index >= stks.size() || stks[index].empty()) return -1;
int res = stks[index].top();
stks[index].pop();
if (stks[index].empty())
{ //若当前栈为空,则删除
stks.erase(stks.begin() + index);
}
return res;
}
};
代码参考自 coeker的题解