Leetcode-面试题 03.03 堆盘子

作者: itbird01 | 来源:发表于2021-10-12 21:59 被阅读0次

    面试题 03.03. 堆盘子

    解题思路

    1.分析题意,有多个栈用于储存数据,栈扩充的前提是当前栈已存储满
    2.用LinkedList来存储多个栈,可以进行末尾栈的直接操作
    3.push操作,如果list末尾栈size>=cap,则新建栈放入list末尾,存储x;否则直接用list末尾栈存储x
    4.pop操作,直接返回List末尾栈的,pop操作元素,并且此时需要判断,pop之后,如果当前list末尾栈为空,则从list移除当前栈
    5.popAt操作,从list中选择相应的栈,进行pop操作,此时需要判断,pop之后的栈大小,如果当前栈为空,则从list移除当前栈
    6.当栈中没有元素或不存在该栈时,pop,popAt 应返回 -1
    7.stackcap 需要考虑为0时,即栈中无法存储元素

    解题遇到的问题

    1.当栈中没有元素或不存在该栈时,pop,popAt 应返回 -1
    2.stackcap 需要考虑为0时,即栈中无法存储元素
    3.push与pop时,需要考虑list.size为0、栈为空等多种特殊情况

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

    1.不使用LinkedList,是否有其他解法?

    ##解法
    import java.util.LinkedList;
    import java.util.Stack;
    
    class StackOfPlates {
        LinkedList<Stack<Integer>> stacklist = new LinkedList<Stack<Integer>>();
        int stackMaxIndex = 0;
    
        public StackOfPlates(int cap) {
            stackMaxIndex = cap;
            stacklist.add(new Stack<Integer>());
        }
    
        public void push(int val) {
            if (stackMaxIndex == 0) {
                return;
            }
            if (stacklist.size() == 0 || stacklist.getLast() == null
                    || stacklist.getLast().size() >= stackMaxIndex) {
                stacklist.add(new Stack<Integer>());
            }
            stacklist.getLast().push(val);
        }
    
        public int pop() {
            if (stacklist.size() == 0 || stacklist.getLast() == null
                    || stacklist.getLast().isEmpty() || stackMaxIndex == 0) {
                return -1;
            }
            int result = stacklist.getLast().pop();
            if (stacklist.getLast().isEmpty()) {
                stacklist.removeLast();
            }
            return result;
        }
    
        public int popAt(int index) {
            if (stacklist.size() <= index || stackMaxIndex == 0) {
                return -1;
            }
            int result = stacklist.get(index).pop();
            if (stacklist.get(index).isEmpty()) {
                stacklist.remove(index);
            }
            return result;
        }
    }
    

    相关文章

      网友评论

        本文标题:Leetcode-面试题 03.03 堆盘子

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