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