<习题集><LeetCode><队列><225/232/387/622/641>

目录

225. 用队列实现栈

232. 用栈实现队列

387. 字符串中的第一个唯一字符

622. 设计循环队列

641. 设计循环双端队列


225. 用队列实现栈

https://leetcode.cn/problems/implement-stack-using-queues/

class MyStack{
    private Queue<Integer> queue1;
    private Queue<Integer> queue2;
    //构造方法;
    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    //压栈;
    public void push(int x){
        //两个队列为空,则选一个先入队列,这里选queue2;
        //之后哪个队列非空,则入哪个队列;
        if (!queue1.isEmpty()){
            queue1.offer(x);
        }else{
            queue2.offer(x);
        }
    }
    //出栈;
    public int pop(){
        //哪个队列非空,就将这个队列的元素转移到另一个队列;
        //转移过程中,记录每一个出队列的元素;
        //直到出元素的队列为空,不将该元素入队列,而是返回;
        if(!queue1.isEmpty()){
            int temp = queue1.poll();
            while (!queue1.isEmpty()){
                queue2.offer(temp);
                temp = queue1.poll();
            }
            return temp;
        }else if(!queue2.isEmpty()){
            int temp = queue2.poll();
            while (!queue2.isEmpty()){
                queue1.offer(temp);
                temp = queue2.poll();
            }
            return temp;
        }
        return -1;
    }
    //查看栈顶元素;
    public int top(){
        //哪个队列非空,就将这个队列的元素转移到另一个队列;
        //转移过程中,记录每一个出队列的元素,直到出元素的队列为空,返回记录的元素;
        int temp = -1;
        if(!queue1.isEmpty()){
            while(!queue1.isEmpty()){
                temp = queue1.poll();
                queue2.offer(temp);
            }
        }else if(!queue2.isEmpty()){
            while(!queue2.isEmpty()){
                temp = queue2.poll();
                queue1.offer(temp);
            }
        }
        return temp;
    }
    //判断栈是否为空;
    public boolean empty(){
        if(queue1.isEmpty() && queue2.isEmpty()){
            return true;
        }else {
            return false;
        }
    }
}

232. 用栈实现队列

https://leetcode.cn/problems/implement-queue-using-stacks/

class MyQueue{
    //两个栈;
    private Stack<Integer> stack1 = null;
    private Stack<Integer> stack2 = null;
    //构造方法,初始化两个栈;
    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }
    //压栈,stack1负责元素入队列;
    public void push(int x){
        stack1.push(x);
    }
    //stack2负责元素出队列;
    public int pop(){
        //如果stack2不为空,直接出;
        if(!stack2.isEmpty()){
            return stack2.pop();
        }else {
            //如果stack2为空,看看stack1是否为空;
            //不为空将stack1元素转移到stack2,再将stack2栈顶元素出栈;
            if(!stack1.isEmpty()){
                while (!stack1.isEmpty()){
                    stack2.push(stack1.pop());
                }
                return stack2.pop();
            }
        }
        return -1;
    }
    //stack2的栈顶元素就是队列的队首元素;
    public int peek(){
        //如果stack2不为空,返回栈顶元素;
        if(!stack2.isEmpty()){
            return stack2.peek();
        }else {
            //如果stack2为空,看看stack1是否为空;
            //不为空将stack1元素转移到stack2,再将stack2栈顶元素peek;
            if(!stack1.isEmpty()){
                while (!stack1.isEmpty()){
                    stack2.push(stack1.pop());
                }
                return stack2.peek();
            }
        }
        return -1;
    }

    public boolean empty(){
        return stack1.isEmpty() && stack2.isEmpty();
    }
}

387. 字符串中的第一个唯一字符

https://leetcode.cn/problems/first-unique-character-in-a-string/

    public int firstUniqChar1(String s) {
        //创建一个代表26个英文字母的数组;
        int[] arr = new int[26];
        //将字符串s转换为字符数组;(也可以不转,使用String的方法即可)
        char[] chs = s.toCharArray();
        //将每个字符转换成整数,这个整数代表下标,放入arr数组中;
        for(int i=0;i<chs.length;i++){
            int n = chs[i] - 'a';
            arr[n]++;
        }
        //遍历字符数组,查arr数组元素,找到第一个元素为1的,就返回这个字符;
        for(int i=0;i<chs.length;i++){
            int n = chs[i] - 'a';
            if(arr[n] == 1){
                return i;
            }
        }
        //找不到返回-1;
        return -1;
    }

622. 设计循环队列

https://leetcode.cn/problems/design-circular-queue/

class MyCircularQueue {
    //用于存放元素的数组elem,队首下标front,队尾下标rear,队列有效元素size;
    private int[] elem;
    private int front;
    private int rear;
    private int size;
    //构造方法,构造容量为k的数组;
    public MyCircularQueue(int k) {
        elem = new int[k];
    }
    //入队列方法;
    public boolean enQueue(int value) {
        if(this.isFull()){
            return false;
        }
        //赋值给队尾元素,rear++;
        elem[rear] = value;
        rear++;
        //超过最大容量,下标回到0;
        if(rear >= elem.length){
            rear = 0;
        }
        //有效元素++;
        size++;
        return true;
    }
    //出队列方法;
    public boolean deQueue() {
        if(this.isEmpty()){
            return false;
        }
        //队首下标直接向后移动;
        front++;
        //超过最大容量,下标回到0;
        if(front >= elem.length){
            front = 0;
        }
        //有效元素--;
        size--;
        return true;
    }
    //查看队首元素;
    public int Front() {
        if(this.isEmpty()){
            return -1;
        }
        return elem[front];
    }
    //查看队尾元素;
    public int Rear() {
        if(this.isEmpty()){
            return -1;
        }
        //应注意队尾在每一次入队列后都会向后移动;
        //因此想得到队尾元素需要查看队尾下标的前一个元素;
        int temp = rear-1;
        //处理循环队列中0下标的转换问题;
        if(rear == 0){
            temp = elem.length-1;
        }
        return elem[temp];
    }
    //有效元素为0,则队列为空;
    public boolean isEmpty() {
        return size == 0;
    }
    //有效元素等于数组容量,则队列满;
    public boolean isFull() {
        return size == elem.length;
    }
}

641. 设计循环双端队列

https://leetcode.cn/problems/design-circular-deque/

class MyCircularDeque {
    //用于存放元素的数组,队首元素下标,队尾元素下标,有效元素个数;
    private int[] elems;
    private int front;
    private int rear;
    private int size;
    //构造方法;
    public MyCircularDeque(int k) {
        elems = new int[k];
    }
    //头插法;
    public boolean insertFront(int value) {
        //判断是否已满;
        if(this.isFull()){
            return false;
        }
        //队首指针前移,注意转换最大下标和0下标;
        if(front == 0){
            front = elems.length-1;
        }else{
            front--;
        }
        //赋值和有效元素++;
        elems[front] = value;
        size++;
        return true;
    }
    //尾插法;
    public boolean insertLast(int value) {
        //判断是否已满;
        if(this.isFull()){
            return false;
        }
        //赋值和有效元素++;
        elems[rear] = value;
        size++;
        //队尾指针后移,注意转换最大下标和0下标;
        if(rear == elems.length-1){
            rear = 0;
        }else{
            rear++;
        }
        return true;
    }
    //头删法;
    public boolean deleteFront() {
        //判断是否为空;
        if(this.isEmpty()){
            return false;
        }
        //队首指针后移,注意转换最大下标和0下标;
        if(front == elems.length-1){
            front = 0;
        }else{
            front++;
        }
        //有效元素--;
        size--;
        return true;
    }
    //尾删法;
    public boolean deleteLast() {
        //判断是否为空;
        if(this.isEmpty()){
            return false;
        }
        //队尾指针前移,注意转换最大下标和0下标;
        if(rear == 0){
            rear = elems.length-1;
        }else{
            rear--;
        }
        //有效元素--;
        size--;
        return true;
    }
    //查看队首元素;
    public int getFront() {
        if(this.isEmpty()){
            return -1;
        }
        return elems[front];
    }
    //查看队尾元素;
    public int getRear() {
        if(this.isEmpty()){
            return -1;
        }
        //注意队尾元素应该是队尾指针的前一个,注意转换最大下标和0下标;
        int temp = rear-1;
        if(rear == 0){
            temp = elems.length-1;
        }
        return elems[temp];
    }
    //判断是否为空;
    public boolean isEmpty() {
        return size == 0;
    }
    //判断是否已满;
    public boolean isFull() {
        return size == elems.length;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236054.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL命令---修改字段的数据类型

介绍 使用sql语句修改字段的数据类型。 命令 alter table 表明 modify 字段名 数据类型;例子 有一张a表&#xff0c;表里有一个id字段&#xff0c;长度为11。使用命令将长度修改为12 下面使用命令进行修改&#xff1a; alter table a modify id int(12) NOT NULL;下面使修…

基于lambda简化设计模式

前言 虽说使用设计模式可以让复杂的业务代码变得清晰且易于维护&#xff0c;但是某些情况下&#xff0c;开发可能会遇到我为了简单的业务逻辑去适配设计模式的情况&#xff0c;本文笔者就以四种常见的设计模式为例&#xff0c;演示如何基于lambda来简化设计模式的实现。 策略…

node.js express JWT token生成与校验

目录 JWT header&#xff08;标头&#xff09; payload&#xff08;有效负载&#xff09; signature&#xff08;签名&#xff09; 访问令牌&#xff08;token&#xff09; express jwt生成、验证 生成jwt 验证jwt JWT JWT 是轻量级的数据交换格式&#xff0c;相对于传…

银行数据分析入门篇:信用卡全生命周期分析,到底应该怎么做?

最近有朋友向我咨询银行信贷业务的数据分析&#xff0c;就看了很多案例&#xff0c;刚好看到一个信用卡全生命周期分析的案例&#xff0c;做得很详细又通俗易懂&#xff0c;基本上可以直接复制套用&#xff0c;所以特地分享给大家。 本文主要分享作者整个分析作品的思路&#x…

力扣17. 电话号码的字母组合(java 回溯法)

Problem: 17. 电话号码的字母组合 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 题目给定一串数字&#xff0c;要求我们找出所有可能的字母组合&#xff0c;即我们可以穷举出所有可能的结果&#xff0c;而涉及到穷举我们自然可以想到利用回溯来解决问题&#xff0c…

我的NPI项目之Android 安全系列 -- Android Strongbox 初识

从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常&#xff0c;这样的单元就是我们通常称作的Secure Element&#xff08;SE&#xff09;&am…

5分钟搞懂K8S Pod Terminating/Unknown故障排查

Kubernetes集群中的Pod有时候会进入Terminating或Unknown状态&#xff0c;本文列举了6种可能的原因&#xff0c;帮助我们排查这种现象。原文: K8s Troubleshooting — Pod in Terminating or Unknown Status 有时我们会看到K8S集群中的pod进入"Terminating"或"U…

FFmpeg-基础组件-AVFrame

本章主要介绍FFmpeg基础组件AVFrame. 文章目录 1.结构体成员2.成员函数AVFrame Host内存的获取 av_frame_get_bufferAVFrame device内存获取av_hwframe_get_buffer&#xff08;&#xff09; 1.结构体成员 我们把所有的代码先粘贴上来&#xff0c;在后边一个一个解释。 typede…

基于ssm办公用品管理系统开发与设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办公用品管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

HashData:大数据时代的“追光者”

12月7日—9日&#xff0c;2023中国光电子产业集群大会暨光电交易博览会在武汉光谷科技会展中心举办。酷克数据作为国内云数仓领军企业&#xff0c;受邀出席本次大会。 在会上&#xff0c;酷克数据展示了云数仓领域最新前沿技术以及HashData云数仓在行业应用落地方案与实践案例…

【SpringBoot教程】SpringBoot 实现前后端分离的跨域访问(Nginx)

作者简介&#xff1a;大家好&#xff0c;我是撸代码的羊驼&#xff0c;前阿里巴巴架构师&#xff0c;现某互联网公司CTO 联系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗…

【docker】Hello World

搜索hello-world镜像 docker search hello-world拉去镜像 docker pull hello-world查看本地镜像 docker images 运行镜像 docker run hello-world查看所有的容器 docker ps -a查询start状态容器 docker ps 输出介绍 CONTAINER ID: 容器 ID。IMAGE: 使用的镜像。COMMAN…

基于正交偶极子的四元数MUSIC算法及其Matlab代码

目录 引言信源数估计MUSIC算法基于正交偶极子的MUSIC算法正交偶极子模型正交偶极子的阵列接受模型基于正交偶极子的MUSIC算法模值约束法求极化信息 基于正交偶极子的四元数MUSIC算法四元数的阵列接受模型四元数MUSIC算法 引言 本文介绍了空间谱估计中的信源数估计、MUSIC算法、…

基于ssm电脑配件销售系统的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于电脑配件销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了电脑配件销售系统&#xff0c;它彻底改变了过…

Django 模型操作-分页(七)

一、连接MySql数据库 1、先安装MySQL 2、再安装MySQL驱动 使用mysqlclient pip install mysqlclient 如果上面的命令安装失败, 则尝试使用国内豆瓣源安装: pip install -i https://pypi.douban.com/simple mysqlclient 二、在settings.py中配置 三、 book表的数据…

多模态AI产业链全景梳理

当前AI模型从单模态向多模态演进&#xff0c;有望实现认知智能&#xff0c;是AI未来发展的明确趋势。近期 AI 多模态模型不断取得突破性进展。OpenAI 于11 月发布了 GPT-4 Turbo 且开放了 GPTs再次颠覆行业&#xff0c;GPTs短期上线数量已超3万&#xff0c;揭开AIGC应用生态序幕…

CSS 实现无缝滚动

效果展示 CSS 知识点 animation 综合运用 页面整体布局 <div class"scroll" style"--t: 20s"><div><span>HTML</span><span>CSS</span><span>JavaScript</span><span>React</span><spa…

WEB 3D技术 以vue3+vite环境为例 讲解vue项目中使用three

上文 WEB 3D 技术&#xff0c;通过node环境创建一个three案例 中 我们打造了自己的第一个Web 3D界面 那么 今天 我们就来结合vue来开发我们的3D界面 这里 我们先创建一个文件夹 作为文件目录 千万不要放C盘 我们 依旧是在终端执行命令 npm init vitelatest输入一下项目名称 …

自动驾驶学习笔记(十七)——视觉感知

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 分类 目标检测 语义分割 实例分割 …

uniapp中使用 unicloud

一、新建一个带有unicloud 二、创建一个服务空间 1. 右键uniCloud&#xff0c;关联云服务空间 我当前没有服务空间&#xff0c;需要新建一个服务空间&#xff0c;之后将其关联。初始化服务空间需要的时间有点长 服务空间初始化成功后&#xff0c;刷新HBuilder&#xff0c;勾选…