leetcode做题笔记1670. 设计前中后队列

请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。

请你完成 FrontMiddleBack 类:

  • FrontMiddleBack() 初始化队列。
  • void pushFront(int val) 将 val 添加到队列的 最前面 。
  • void pushMiddle(int val) 将 val 添加到队列的 正中间 。
  • void pushBack(int val) 将 val 添加到队里的 最后面 。
  • int popFront() 将 最前面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。
  • int popMiddle() 将 正中间 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。
  • int popBack() 将 最后面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1 。

请注意当有 两个 中间位置的时候,选择靠前面的位置进行操作。比方说:

  • 将 6 添加到 [1, 2, 3, 4, 5] 的中间位置,结果数组为 [1, 2, 6, 3, 4, 5] 。
  • 从 [1, 2, 3, 4, 5, 6] 的中间位置弹出元素,返回 3 ,数组变为 [1, 2, 4, 5, 6] 。

思路一:模拟题意

c++解法

class FrontMiddleBackQueue {
public:FrontMiddleBackQueue() {}void pushFront(int val) {left.push_front(val);if(left.size() == right.size()+2){right.push_front(left.back());left.pop_back();}}void pushMiddle(int val) {if(left.size() == right.size()+1){right.push_front(left.back());left.pop_back();}left.push_back(val);}void pushBack(int val) {right.push_back(val);if(left.size()+1 == right.size()){left.push_back(right.front());right.pop_front();}}int popFront() {if(left.empty()) return -1;int val = left.front();left.pop_front();if(left.size()+1 == right.size()){left.push_back(right.front());right.pop_front();}return val;}int popMiddle() {if(left.empty()) return -1;int val = left.back();left.pop_back();if(left.size()+1 == right.size()){left.push_back(right.front());right.pop_front();}return val;}int popBack() {if(left.empty()) return -1;int val = 0;if(right.empty()){val = left.back();left.pop_back();}else{val = right.back();right.pop_back();if(left.size() == right.size()+2){right.push_front(left.back());left.pop_back();}}return val;}
private:deque<int> left;deque<int> right;
};/*** Your FrontMiddleBackQueue object will be instantiated and called as such:* FrontMiddleBackQueue* obj = new FrontMiddleBackQueue();* obj->pushFront(val);* obj->pushMiddle(val);* obj->pushBack(val);* int param_4 = obj->popFront();* int param_5 = obj->popMiddle();* int param_6 = obj->popBack();*/

分析:

利用两个双向链表分别存储左边和右边的数,方便构建方法,根据题意将每个方法编写完成即可解决

总结:

本题考察对数据结构前中后队列的实现,利用stl双向链表可以很好解决

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

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

相关文章

RequestContextHolder 类简介

RequestContextHolder 类简介 RequestContextHolder是Spring Framework中的一个类&#xff0c;用于在多线程环境中存储和访问HTTP请求的上下文信息。它允许在Spring应用程序中从任何位置访问当前请求的相关信息&#xff0c;如HTTP头部、会话数据等&#xff0c;而无需将请求对象…

C语言实现串的部分算法

一、简介 串&#xff08;string&#xff09;&#xff08;或字符串&#xff09;是由零个或多个字符组成的有序序列&#xff0c;一般记为 sa1a2....an s为串的名&#xff0c;用单引号括起来的时字符序列串的值&#xff0c;串中字符的数目n称为串的长度。 零个字符的串称为空串…

C语言--每日选择题--Day28

第一题 1. 设a和b均为double型变量&#xff0c;且a5.5、b2.5&#xff0c;则表达式(int)ab/b的值是&#xff08; &#xff09; A&#xff1a;6.500000 B&#xff1a;6 C&#xff1a;5.500000 D&#xff1a;6.000000 答案及解析 D 本题考查的是不同数据类型之间的变量进行运算时…

常见面试题-Redis 切片集群以及主节点选举机制

Redis 切片集群了解吗&#xff1f; 答&#xff1a; Redis 切片集群是目前使用比较多的方案&#xff0c;Redis 切面集群支持多个主从集群进行横向扩容&#xff0c;架构如下&#xff1a; 使用切片集群有什么好处&#xff1f; 提升 Redis 读写性能&#xff0c;之前的主从模式中&…

使用C语言库函数qsort排序注意点

目录 题目背景错误C语言代码&#xff1a;正确C语言代码&#xff1a;注意点 题目背景 高校团委组织校园歌手比赛&#xff0c;进入决赛的校园歌手有10位,歌手编号从1到10进行编号。组委会随机抽取方式产生了决赛次序为&#xff1a;3,1,9,10,2,7,5,8,4,6。比赛现场有5个评委为参赛…

【Docker项目实战】使用Docker部署Plik临时文件上传系统

【Docker实战项目】使用Docker部署Plik 临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Plik镜像五、部署Plik临时…

PLC:200smart

PLC&#xff1a;200smart 第十章、数据类型、数据存储1、数据类型1.1、有符号数1.2、有符号数 2、传送指令 第十一章、比较指令、整数、浮点数的运算1、比较指令1、运算指令1.1、浮点数运算1.2、整数运算 第十章、数据类型、数据存储 1、数据类型 数据类型分为两大类 无符号数…

Java中的mysql——面试题+答案——第24期

当涉及MySQL时&#xff0c;面试题可以涵盖更多高级主题、安全性和实践经验。 MySQL中的存储引擎InnoDB和MyISAM的区别是什么&#xff1f; 答案&#xff1a; InnoDB支持事务&#xff0c;而MyISAM不支持。InnoDB使用行级锁&#xff0c;而MyISAM使用表级锁。InnoDB支持外键&#x…

【小布_ORACLE】Part11-1--RMAN Backups笔记

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

用了这7款html网页制作软件,你会爱上编程!

制作网页是一个复杂的过程&#xff0c;需要注意到各种细节&#xff0c;只有依靠出色的技术能力和强大的工具&#xff0c;我们才能真正达到我们的目标。幸运的是&#xff0c;有很多优秀的HTML网页设计软件可以让整个流程变得更加轻松和高效。以下就是我们经过深思熟虑和严格筛选…

Redis 的过期策略都有哪些?

思考:假如redis的key过期之后&#xff0c;会立即删除吗&#xff1f; Redis对数据设置数据的有效时间&#xff0c;数据过期以后&#xff0c;就需要将数据从内存中删除掉。可以按照不同的规则进行删除&#xff0c;这种删除规则就被称之为数据的删除策略&#xff08;数据过期策略…

i已学赋能智慧教育时代的幼儿教育

伴随“教育数字化战略行动”的深入开展,智慧教育正式成为国家战略。智慧教育延伸至家校社教育的每个阶段。当前,为适应智慧教育发展趋势,我国制定了《中国教育现代化2035》《教育部关于加强“三个课堂”应用的指导意见》《教育信息化2.0行动计划》等文件。幼儿作为智慧教育、智…

Vue.js 的生命周期

Vue.js 的生命周期钩子函数是一组在 Vue 实例生命周期中执行的函数&#xff0c;它们允许你在特定阶段执行自定义逻辑。以下是 Vue.js 的生命周期钩子函数以及它们在生命周期中的执行时机&#xff1a; 1、beforeCreate: 在实例初始化之后&#xff0c;数据观测 (data observer)…

什么是高级语言、机器语言、汇编语言?什么是编译和解释?

1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种&#xff0c;例如 C、C、Java、Python 等。这些语言被称为高级语言&#xff0c;因为它们更接近人类的自然语言&#xff0c;而不是计算机能够直接…

js 判断变量的类型 typeof Object.prototype.toString.call(a) instanceof

方法1 语法&#xff1a;typeof 变量xxx&#xff0c;返回值是&#xff0c;变量xxx的数据类型的字符串表达 typeof undefined 返回 "undefined"typeof 5 返回 "number"typeof hello 返回 "string"typeof true …

Linux操作系统上安装MYSQL 5.7 记录

本文描述了mysql server的下载安装初始化工作。 下载 https://dev.mysql.com/downloads/mysql/ 安装&#xff1a; 环境: CentOS 7.6 ,版本&#xff1a;MYSQL 5.7 tar -xvf mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar yum -y install mysql-community-*.rpm启动 systemc…

品优购:nav导航、footer部分

目录 nav导航栏 footer部分 mod-copyright nav导航栏 nav盒子通栏有高度&#xff0c;有下边框 1号盒子左浮动&#xff0c;dropdown 2号盒子左侧浮动&#xff0c;navitems导航栏组 先看dropdown里&#xff0c;先表头&#xff0c;这里意思是description term, 然后是一系列表…

python基础练习题库实验5

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6058fb4b66994aed838f920f7fe75706.png)题目4代码实验结果题目总结题目1 编写一个程序,使用while循环语句和字符串格式显示以下精确输出。 例如: …

Linux命令进阶——grep管道命令在查看日志的场景中的使用 具体案例

前言 本篇博客介绍在查看日志的场景中&#xff0c;grep管道命令的使用&#xff0c;并给出了具体的案例。 以下为Linux相关的博客文章列表&#xff1a; Linux——认识Linux的目录结构 & 常用命令 & vim命令 & 权限及其控制 & 防火墙命令 & 自定义命令 &a…

2023年【广东省安全员B证第四批(项目负责人)】证考试及广东省安全员B证第四批(项目负责人)复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年广东省安全员B证第四批&#xff08;项目负责人&#xff09;证考试为正在备考广东省安全员B证第四批&#xff08;项目负责人&#xff09;操作证的学员准备的理论考试专题&#xff0c;每个月更新的广东省安全员B证…