Leetcode-面试题 03.01 三合一

作者: itbird01 | 来源:发表于2021-10-14 09:27 被阅读0次

面试题 03.01. 三合一

解题思路

1.最初并未理解stackNum的含义,仔细分析题意和提交一次之后,发现stackNum代表的是第几个栈的意思,题意中三个栈的描述,也就是说每次push,是往指定的栈push元素的意思,所以根据题意分析,

  • 如何用一个数组实现三个栈的存储和读取,是本题要解决的问题*
    2.根据题意分析,三个栈的大小是相同的,但是里面的元素个数可能不同,所以可以用一个new int[stackSize3]数组来存储三个栈的数据
    3.存储时,需要按照一定规则来,将数组划分为三个区域,(0stackSize-1)(stackSize2
    stackSize-1)(2stackSize~3stackSize-1)
    4.读取时,需要有三个指针,分别指向三个栈的当前位置,初始位置为(-1,stackSize-1,2*stackSize-1)

解题遇到的问题

题意理解

后续需要总结学习的知识点

##解法
class TripleInOne {
    private int[] vendor = null;
    private int[] currentIndex = null;
    private int stackSize = 0;

    public TripleInOne(int stackSize) {
        this.stackSize = stackSize;
        vendor = new int[stackSize * 3];
        currentIndex = new int[]{-1, stackSize - 1, 2 * stackSize - 1};
    }

    public void push(int stackNum, int value) {
        if (currentIndex[stackNum] >= (stackNum + 1) * stackSize - 1) {
            return;
        }
        vendor[++currentIndex[stackNum]] = value;
    }

    public int pop(int stackNum) {
        if (currentIndex[stackNum] < stackNum * stackSize) {
            return -1;
        }
        return vendor[currentIndex[stackNum]--];
    }

    public int peek(int stackNum) {
        if (currentIndex[stackNum] >= stackNum * stackSize) {
            return vendor[currentIndex[stackNum]];
        }
        return -1;
    }

    public boolean isEmpty(int stackNum) {
        return currentIndex[stackNum] < stackNum * stackSize ? true : false;
    }
}

相关文章

网友评论

    本文标题:Leetcode-面试题 03.01 三合一

    本文链接:https://www.haomeiwen.com/subject/ulprnltx.html