三合一(简单)
2020年10月14日
题目来源:力扣
解题
题目意思是这样的,用一个数组来存放三个栈的内容,以stackNum来代表是哪个栈,stackSize就是每个栈的大小,这也决定了我们这个数组的大小为stackSize*3
class TripleInOne {
private int[] arr; //装栈数据的数组
private int stackSize; //栈的容量
private int[] stackTop; //三个栈的栈顶指针
public TripleInOne(int stackSize) {
this.stackSize=stackSize;
arr=new int[stackSize*3];
stackTop=new int[]{
0,1,2};
}
public void push(int stackNum, int value) {
//获得当前栈顶的元素
int curStackTop=stackTop[stackNum];
//如果当前栈顶除以3等于栈的大小,代表满了,压不进去
if(curStackTop/3==stackSize) return;
//压进数组,栈顶指针加3
arr[curStackTop]=value;
stackTop[stackNum]+=3;
}
public int pop(int stackNum) {
if(isEmpty(stackNum)) return -1;
//删除对应的栈顶元素,前面加入元素的时候加了3,现在要减掉
int value = arr[stackTop[stackNum] - 3];
//栈顶下标减小3
stackTop[stackNum] -= 3;
return value;
}
public int peek(int stackNum) {
if(isEmpty(stackNum)) return -1;
return arr[stackTop[stackNum]-3];
}
public boolean isEmpty(int stackNum) {
//如果小于3,说明没数据了
return stackTop[stackNum] < 3;
}
}
/**
* Your TripleInOne object will be instantiated and called as such:
* TripleInOne obj = new TripleInOne(stackSize);
* obj.push(stackNum,value);
* int param_2 = obj.pop(stackNum);
* int param_3 = obj.peek(stackNum);
* boolean param_4 = obj.isEmpty(stackNum);
*/