LeetCode—面试题:三合一(数组)

三合一(简单)

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);
 */

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/109075928