• 剑指offer刷题篇——第一篇(栈和队列)【秋招,前后端,客户端】


    一、栈与队列

    (1)用两个栈实现队列

    题目描述:

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,
    分别完成在队列尾部插入整数和在队列头部删除整数的功能。
    (若队列中没有元素,deleteHead 操作返回 -1 )
    
    • 1
    • 2
    • 3

    思路描述:

    首先创建两个LinkedList集合作为栈来存放数据,栈A主要是用于存放新加入的数据,栈B时用于删除数据,当有数据进来时,我们将齐插入到栈A中,当删除元素时,首先查看存放删除数据的栈B中是否含有数据,如果有则直接弹出删除的数据,若没有则执行第二步,判断A栈是否为空,若为空则返回-1,否则执行第三步,将A栈中的数据倒序添加至B栈中,这样子删除的时候就能够实现队列的先进先出了。

    代码实现:

    class CQueue {
        LinkedList A;
        LinkedList B;
        public CQueue() {
            A = new LinkedList();
            B = new LinkedList();
        }
        
        public void appendTail(int value) {
            A.addLast(value);
        }
        
        public int deleteHead() {
            if(!B.isEmpty())return B.removeLast();
            if(A.isEmpty()) return -1;
            while(!A.isEmpty()){
                B.addLast(A.removeLast());
            }
            return B.removeLast();
        }
    }
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * CQueue obj = new CQueue();
     * obj.appendTail(value);
     * int param_2 = obj.deleteHead();
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    (2)包含min函数的栈

    题目描述:

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

    思路描述:

    普通的栈方法的的原理实现,

    代码实现:

    class MinStack {
        Stack A, B;
        public MinStack() {
            A = new Stack<>();
            B = new Stack<>();
        }
        public void push(int x) {
            A.add(x);
            if(B.empty() || B.peek() >= x)
                B.add(x);
        }
        public void pop() {
            if(A.pop().equals(B.peek()))
                B.pop();
        }
        public int top() {
            return A.peek();
        }
        public int min() {
            return B.peek();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    一款可自动跳广告的安卓App开源项目
    Jetpack Compose 入门教程之Text
    贪吃蛇游戏
    在树莓派上搭建属于自己的网页(1)
    Linux-安装MySQL(详细教程)
    我做了一个在线白板(二)
    Swagger-----knife4j框架
    Redis 的性能常见问题
    Java+Swing+mysql高校教材管理系统
    py 打开多个页面
  • 原文地址:https://blog.csdn.net/weixin_52162723/article/details/126096942