<习题集><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;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校验maven安装是否安装成功失败

错误分析&#xff1a; 如图&#xff0c;核心文件存没有存放在maven文件夹里&#xff0c;而是存放在他下面的一个文件夹中 解决办法&#xff1a; 将文件剪切到“apache-maven-3.9.6-bin”文件夹中 验证&#xff1a; 问题解决&#xff01;

Mybatis-Plus 3.3.2 发布,新增优雅的数据安全保护姿势[MyBatis-Plus系列]

Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 存在数据库中的数据对于普通用户而言是不可见的,好像是藏起来了一样,但对于开发者,只要知道数据库的连接地址、用户名、密码,则数据不再安全;这也意味着,一旦连接数据库的配置文件暴露出去,则数据不再安全…

Java毕业设计 SSM SpringBoot 在线学习系统

Java毕业设计 SSM SpringBoot 在线学习系统 SSM SpringBoot 在线学习系统 功能介绍 首页 图片轮播 视频推荐 在线学习 学习介绍 评论 收藏 资料中心 资料详情 下载资料 话题讨论 文档发布 试题中心 系统公告 登录 注册学生 个人中心 试题记录 错题本 我的收藏 算法演示 结果分…

图-数据结构

图的介绍 如果你有学过《离散数学》&#xff0c;那么对图的概念一定不陌生&#xff0c;在计算机科学中&#xff0c;一个图就是一些顶点的集合&#xff0c;这些顶点通过一系列边连接&#xff08;结对&#xff09;。顶点用圆圈表示&#xff0c;边就是这些圆圈之间的连线。注意&a…

使用 PyTorch FSDP 微调 Llama 2 70B

通过本文&#xff0c;你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中&#xff0c;我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data Paral…

Win11在Virtualbox上安装ubuntu操作系统

注&#xff1a;原创笔记&#xff0c;以下图片水印为本人 相关工具展示 第四个&#xff1a;ubuntu的vmdk文件&#xff0c;用于配置虚拟机 第5/6个&#xff1a;virtualbox安装包 一、安装 VirtualBox 由于win11版本问题&#xff0c;如果装不了 virtualBox需要在官网安装最新版…

【USRP】LFTX / LFRX

LFTX/LFRX 设备概述 LFTX 子板利用两个高速运算放大器来允许 0-30 MHz 的传输。该板仅接受实模式信号。LFTX 非常适合 HF 频段的应用&#xff0c;或使用外部前端来上变频和放大中间信号的应用。LFTX 的输出可以独立处理&#xff0c;也可以作为单个 I/Q 对进行处理。 主要特征…

C语言使用malloc函数模拟开辟二维数组(带分析)

系列文章目录 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 当我们使用malloc函数来模拟创建一个二维数组时&#xff0c;我们需要理解…

【23真题】做不完啦!

马上就要考研了&#xff0c;虽然掐着手指头&#xff0c;也没办法把我手里的真题全部做完&#xff0c;发完。但是我依然会更新到考研前一天&#xff0c;绝不断更&#xff0c;就和我每日一题一样&#xff0c;从开始到现在&#xff0c;无论发生任何事情&#xff0c;我一天没有断更…

城市数字化管理、智慧城市、数字孪生城市间的关系和演变

基于《基于数字孪生的智慧城市》和《2023版数字孪生世界白皮书》&#xff0c;我们可以全面了解从数字城市管理到智慧城市&#xff0c;再到数字孪生城市的关系和发展历程。 以下是这一顺序和继承关系的要点总结&#xff1a; 城市数字化管理 这是城市地区向智慧城市演进的初始…

Android---Kotlin 学习002

声明变量 在 Kotlin 中定义一个变量&#xff0c;通过关键字 var 开始。然后是变量名&#xff0c;在“:”后紧跟变量类型。 示例1&#xff1a;声明一个 int 类型的变量 var num:Int 1 示例2&#xff1a;声明一个 String 类型的变量 var str:String "Hello world&quo…

Rocket MQ 架构介绍

文章目录 为什么选择Rocket MQ基本概念优点缺点架构图编程模型发送者发送消息固定步骤消费者消费消息固定步骤 为什么选择Rocket MQ Rocket MQ是阿帕奇顶级的开源项目&#xff0c;由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么…