三合一。描述如何只用一个数组来实现三个栈。
你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)
方法。stackNum 表示栈下标,value 表示压入的值。
构造函数会传入一个stackSize参数,代表每个栈的大小。
示例1:
输入:
["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"]
[[1], [0, 1], [0, 2], [0], [0], [0], [0]]
输出:
[null, null, null, 1, -1, -1, true]
说明:当栈为空时`pop, peek`返回-1,当栈满时`push`不压入元素。
示例2:
输入:
["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"]
[[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]]
输出:
[null, null, null, null, 2, 1, -1, -1]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/three-in-one-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class TripleInOne {
int n, v;
int size;
vector<int> tail;//尾指针位置
vector<int> stk;
public:
TripleInOne(int stackSize) {
n = stackSize;
size = 3*stackSize;
stk.resize(size);
tail.resize(3);
tail[0] = 0, tail[1] = stackSize, tail[2] = 2*stackSize;
}
void push(int stackNum, int value) {
if(tail[stackNum] < (stackNum+1)*n )
{
stk[tail[stackNum]] = value;
tail[stackNum]++;
}
}
int pop(int stackNum) {
if(tail[stackNum] == stackNum*n)
return -1;
v = stk[tail[stackNum]-1];
tail[stackNum]--;
return v;
}
int peek(int stackNum) {
if(tail[stackNum] == stackNum*n)
return -1;
return stk[tail[stackNum]-1];
}
bool isEmpty(int stackNum) {
return tail[stackNum]==stackNum*n;
}
};