当前位置: 首页 > article >正文

【LeetCode:1670. 设计前中后队列 | 数据结构设计】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 数据结构设计
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 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] 。

示例 1:

输入:
[“FrontMiddleBackQueue”, “pushFront”, “pushBack”, “pushMiddle”, “pushMiddle”, “popFront”, “popMiddle”, “popMiddle”, “popBack”, “popFront”]
[[], [1], [2], [3], [4], [], [], [], [], []]
输出:
[null, null, null, null, null, 1, 3, 4, 2, -1]

解释:
FrontMiddleBackQueue q = new FrontMiddleBackQueue();
q.pushFront(1); // [1]
q.pushBack(2); // [1, 2]
q.pushMiddle(3); // [1, 3, 2]
q.pushMiddle(4); // [1, 4, 3, 2]
q.popFront(); // 返回 1 -> [4, 3, 2]
q.popMiddle(); // 返回 3 -> [4, 2]
q.popMiddle(); // 返回 4 -> [2]
q.popBack(); // 返回 2 -> []
q.popFront(); // 返回 -1 -> [] (队列为空)

提示:

1 <= val <= 109
最多调用 1000 次 pushFront, pushMiddle, pushBack, popFront, popMiddle 和 popBack 。

🌟 求解思路&实现代码&运行结果


⚡ 数据结构设计

🥦 求解思路
  1. 通过一个LinkedList数据结构来实现三个前、中、后队列。
  2. 添加的时候,在指定的位置加入,返回删除的时候直接,也直接删除指定的位置的元素即可。
  3. 实现代码如下所示:
🥦 实现代码
class FrontMiddleBackQueue {

    private List<Integer> queue;

    public FrontMiddleBackQueue() {
        this.queue=new LinkedList<>();
    }
    
    public void pushFront(int val) {
        queue.add(0,val);
    }
    
    public void pushMiddle(int val) {
        queue.add((queue.size())/2,val);
    }
    
    public void pushBack(int val) {
        queue.add(val);
    }
    
    public int popFront() {
        return queue.size()<1?-1:queue.remove(0);
    }
    
    public int popMiddle() {
        return queue.size()<1?-1:queue.remove((queue.size()-1)/2);
    }
    
    public int popBack() {
        return queue.size()<1?-1:queue.remove(queue.size()-1);
    }
}

/**
 * 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();
 */
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/news/150017.html

相关文章:

  • spring-webflux的一些概念的理解
  • 【Rust】基本的语法概念
  • 唯创知音WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力
  • python每日一题——12最小覆盖子串
  • GoLang切片
  • Leetcode算法系列| 1. 两数之和(四种解法)
  • OpenLDAP配置web管理界面PhpLDAPAdmin服务-centos9stream
  • Spring---对象的存储和读取
  • PyQt6库和工具库QTDesigner安装与配置
  • Lazada详情API接口:一键获取商品信息的深度实践
  • 喜报 | 再获影响力产品奖!擎创科技实力亮相GOPS全球运维大会
  • Java-多线程基本知识学习总结
  • 二叉树OJ题之二
  • Windows下搭建Tomcat HTTP服务,发布公网远程访问
  • 前端笔试遇到的坑-100题
  • web自动化之源selenium
  • C#,《小白学程序》第二十一课:大数的减法(BigInteger Subtract)
  • Git_git相关指令 高阶
  • 人工智能原理复习--知识表示(二)
  • Spark local模式的安装部署
  • 【hacker送书第6期】深入理解Java核心技术
  • 什么是计算机病毒?
  • 户外低功耗太阳能板供电无线RTU数据采集支持定时采集各类485接口传感器数据推送数据到第三方平台远程监测系统搭建方案
  • 数据结构算法-分支定界算法
  • 【brpc学习实践四】异步请求案例详解
  • 【分享】Java Helper 与 Utility 类的区别
  • MYSQL基础之【创建数据表,删除数据表】
  • 鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)
  • 仿美团外卖源码/在线外卖平台源码PHP/支持多商户+多样化配送费+本土外卖+支持第三方配送
  • 【独家OD2023C卷真题】20天拿下华为OD笔试【贪心】2023C-分配土地最大面积【欧弟算法】全网注释最详细分类最全的华为OD真题题解