Leetcode中等:641. 设计循环双端队列

Java实现 LeetCode 641 设计循环双端队列(暴力) 641. 设计循环双端队列 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 t... 阅读详情

题目:设计循环双端队列

  • 题号:641
  • 难度:中等
  • https://leetcode-cn.com/problems/design-circular-deque/

设计实现双端队列。

  • MyCircularDeque(k):构造函数,双端队列的大小为k。
  • insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。
  • insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。
  • deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。
  • deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。
  • getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。
  • getRear():获得双端队列的最后一个元素。如果双端队列为空,返回 -1。
  • isEmpty():检查双端队列是否为空。
  • isFull():检查双端队列是否满了。

示例:

输入
["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"]
[[3], [1], [2], [3], [4], [], [], [], [4], []]
输出
[null, true, true, true, false, 2, true, true, true, 4]

解释
MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3
circularDeque.insertLast(1);			        // 返回 true
circularDeque.insertLast(2);			        // 返回 true
circularDeque.insertFront(3);			        // 返回 true
circularDeque.insertFront(4);			        // 已经满了,返回 false
circularDeque.getRear();  				// 返回 2
circularDeque.isFull();				        // 返回 true
circularDeque.deleteLast();			        // 返回 true
circularDeque.insertFront(4);			        // 返回 true
circularDeque.getFront();				// 返回 4

提示:

  • 1 <= k <= 1000
  • 0 <= value <= 1000
  • insertFront, insertLast, deleteFront, deleteLast, getFront, getRear, isEmpty, isFull 调用次数不大于 2000 次

实现

C# 语言

public class MyCircularDeque 
{
    private int _pFront;
    private int _pRear;
    private readonly int[] _dataset;
    private int _length;
    private int _maxSize;
    
    /** Initialize your data structure here. Set the size of the deque to be k. */
    public MyCircularDeque(int k) 
    {
        _dataset = new int[k];
        _length = 0;
        _maxSize = k;
        _pFront = 0;
        _pRear = 0;        
    }
    
    /** Adds an item at the front of Deque. Return true if the operation is successful. */
    public bool InsertFront(int value) 
    {
        if (_length == _maxSize)
            return false;

        _pFront = (_pFront - 1 + _maxSize)%_maxSize;
        _dataset[_pFront] = value;
        _length++;
        return true;        
    }
    
    /** Adds an item at the rear of Deque. Return true if the operation is successful. */
    public bool InsertLast(int value) 
    {
        if (_length == _maxSize)
            return false;

        _dataset[_pRear] = value;
        _pRear = (_pRear + 1)%_maxSize;
        _length++;
        return true;        
    }
    
    /** Deletes an item from the front of Deque. Return true if the operation is successful. */
    public bool DeleteFront() 
    {
        if (_length == 0)
            return false;
        _pFront = (_pFront + 1)%_maxSize;
        _length--;
        return true;        
    }
    
    /** Deletes an item from the rear of Deque. Return true if the operation is successful. */
    public bool DeleteLast() 
    {
        if (_length == 0)
            return false;
        _pRear = (_pRear - 1 + _maxSize)%_maxSize;
        _length--;
        return true;        
    }
    
    /** Get the front item from the deque. */
    public int GetFront() 
    {
        if (_length == 0)
            return -1;

        return _dataset[_pFront];        
    }
    
    /** Get the last item from the deque. */
    public int GetRear() 
    {
        if (_length == 0)
            return -1;
        int index = (_pRear - 1 + _maxSize)%_maxSize;
        return _dataset[index];        
    }
    
    /** Checks whether the circular deque is empty or not. */
    public bool IsEmpty() 
    {
        return _length == 0;        
    }
    
    /** Checks whether the circular deque is full or not. */
    public bool IsFull() 
    {
        return _length == _maxSize;        
    }
}

/**
 * Your MyCircularDeque object will be instantiated and called as such:
 * MyCircularDeque obj = new MyCircularDeque(k);
 * bool param_1 = obj.InsertFront(value);
 * bool param_2 = obj.InsertLast(value);
 * bool param_3 = obj.DeleteFront();
 * bool param_4 = obj.DeleteLast();
 * int param_5 = obj.GetFront();
 * int param_6 = obj.GetRear();
 * bool param_7 = obj.IsEmpty();
 * bool param_8 = obj.IsFull();
 */

Python 语言:

class MyCircularDeque(object):

    def __init__(self, k):
        """
        :type k: int
        """
        self._dataset = [0] * k
        self._pFront = 0
        self._pRear = 0
        self._length = 0
        self._maxSize = k

    def insertFront(self, value):
        """
        :type value: int
        :rtype: bool
        """
        if self._length == self._maxSize:
            return False
        self._pFront = (self._pFront - 1 + self._maxSize) % self._maxSize
        self._dataset[self._pFront] = value
        self._length += 1
        return True

    def insertLast(self, value):
        """
        :type value: int
        :rtype: bool
        """
        if self._length == self._maxSize:
            return False
        self._dataset[self._pRear] = value
        self._pRear = (self._pRear + 1) % self._maxSize
        self._length += 1
        return True

    def deleteFront(self):
        """
        :rtype: bool
        """
        if self._length == 0:
            return False
        self._pFront = (self._pFront + 1) % self._maxSize
        self._length -= 1
        return True

    def deleteLast(self):
        """
        :rtype: bool
        """
        if self._length == 0:
            return False
        self._pRear = (self._pRear - 1 + self._maxSize) % self._maxSize
        self._length -= 1
        return True

    def getFront(self):
        """
        :rtype: int
        """
        if self._length == 0:
            return -1
        return self._dataset[self._pFront]

    def getRear(self):
        """
        :rtype: int
        """
        if self._length == 0:
            return -1
        index = (self._pRear - 1 + self._maxSize) % self._maxSize
        return self._dataset[index]

    def isEmpty(self):
        """
        :rtype: bool
        """
        return self._length == 0

    def isFull(self):
        """
        :rtype: bool
        """
        return self._length == self._maxSize

# Your MyCircularDeque object will be instantiated and called as such:
# obj = MyCircularDeque(k)
# param_1 = obj.insertFront(value)
# param_2 = obj.insertLast(value)
# param_3 = obj.deleteFront()
# param_4 = obj.deleteLast()
# param_5 = obj.getFront()
# param_6 = obj.getRear()
# param_7 = obj.isEmpty()
# param_8 = obj.isFull()
641:设计循环双端队列 如果操作成功返回 true ,否则返回 false。如果操作成功返回 true ,否则返回 false。如果操作成功返回 true ,否则返回 false。如果操作成功返回 true ,否则返回 false。boolean isEmpty() :若双端队列为空,则返回 true ,否则返回 false。// 返回 true。boolean isFull() :若双端队列满了,则返回 true ,否则返回 false。int getFront() ):从双端队列头部获得一个元素。 阅读详情

相关推荐

641. 设计循环双端队列

双端:可以从两端插入和删除。固定容量:最多存储k个元素。循环:数组下标要循环利用。使用循环数组模拟队列结构,并用两个指针维护前后端的位置。通过本题,我们学习了如何设计一个高效的双端队列,实现所有操作均为 O(1) 时间复杂度。加深对循环数组与指针管理的理解提升对数据结构底层机制的掌控能力为面试中的系统设计题打好基础这种模拟设计类题目在各大平台(如 LeetCode、力扣)常有出现,建议熟练掌握并能够从多角度实现和优化。

Lucy_wzw的博客 904

数据结构与算法之-641. 设计循环双端队列 - 力扣(LeetCode)

循环队列

Three_ST的博客 346

【数据结构-队列】双端队列

双端队列、队列、栈对比定义特点队列一端删除(头)另一端添加(尾)栈一端删除和添加(顶)双端队列两端都可以删除、添加优先级队列优先级高者先出队延时队列根据延时时间确定优先级并发非阻塞队列队列空或满时不阻塞并发阻塞队列队列空时删除阻塞、队列满时添加阻塞。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

[独有源码]java-jspflowershop6t641规划与实现适合自己的毕业设计的策略

选题背景: 随着社会的发展和人们生活水平的提高,花卉市场逐渐兴起并呈现出蓬勃发展的态势。作为一种重要的装饰品和礼品,花卉不仅能够美化环境,还能够传递情感和表达祝福。然而,在传统的实体花店中,消费者购买花卉往往面临着时间成本高、选择范围有限以及价格较高等问题。因此,建立一个在线花卉购物平台,为消费者提供更加便捷、多样化和经济实惠的购物体验,具有重要的现实意义。 选题意义: 首先,通过建立一个在线花卉购物平台,可以有效解决传统实体花店存在的时间成本高的问题。消费者只需通过网络即可随时随地进行花卉选购,无需亲自

海彤程序设计 152

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 365

告别重打包:在Android 9上实现免Root的Frida-Gadget持久化Hook(附AOSP源码修改详解)

本文详细介绍了在Android 9上实现免Root的Frida-Gadget持久化Hook技术方案。通过修改AOSP源码,绕过传统重打包方式面临的签名校验和完整性检查,实现在非Root环境下的系统级Hook。文章包含核心代码修改、编译配置调整及调试技巧,为移动安全研究提供高效稳定的解决方案。

weixin_33726313的博客 501

双端队列详解(python)

双端队列(Deque)是一种特殊的队列,它允许在队列的两端进行插入和删除操作。Python中的标准库collections模块提供了deque类,它实现了高效的双端队列数据结构。

qq_49693324的博客 1494

保姆级教程:用GMT6.1绘制专业地形起伏图(从数据下载到出图避坑)

本文提供了一份详细的GMT6.1绘制地形起伏图的保姆级教程,从环境搭建到数据下载,再到核心绘图命令解析,帮助用户避开常见错误。特别适合科研人员和地理信息爱好者快速掌握专业地形图的绘制技巧,提升工作效率。

weixin_42549723的博客 276

LeetCode641-设计循环双端队列

题目描述: 求解: class MyCircularDeque: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the deque to be k. """ self.head,self.tail=0...

weixin_45138411的博客 244

使用 MATLAB/Simulink 构建一个 压水堆核电机组的反应堆控制与功率调节系统 仿真模型

本文通过Simulink构建压水堆核电机组的反应堆控制与功率调节模型,详细介绍了建模流程:从中子点动力学核心方程、反应性反馈模型(控制棒、多普勒和慢化剂效应)、一回路热工模型到完整的闭环控制系统。教程包含系统结构设计、参数设置、模块连接方法,以及典型负荷变化场景的仿真分析,帮助读者理解核反应堆动态特性和控制原理。同时提供了进阶建模建议,如分布参数模型和先进控制策略的应用。该模型为教学简化版,强调核能系统的机理建模与Simulink实现方法,适合核工程与控制领域的学习者参考实践。

amy_mhd的博客 186

stable-diffusion-webui的逐步部署教程

本文主要介绍了stable-diffusion-webui的逐步部署教程,希望能对使用Stable Diffusion的同学们有所帮助。 文章目录 1. 前言 2. 逐步部署教程 2.1 创建Python环境 2.2 安装依赖库 2.3 运行代码

weixin_43178406的博客 6万+

641. 设计循环双端队列 难度:中等_力扣刷题

https://leetcode-cn.com/problems/design-circular-deque/ 641. 设计循环双端队列 难度:中等 //循环队列(622题)=>相比普通的队列,循环队列可以放满 //双向循环队列=>与循环队列相比,就是:双向循环队列的头部既可以出队,又可以入队, 并且 ,尾部可以作出队和入队的操作. 双端队列的英文名:deque=>double_ended_queue class MyCircularDeque { public: /

敖丙007的博客 556

电路设计仿真软件:Mentor Graphics_(1).MentorGraphics电路设计仿真软件概述

菜单栏:包含文件、编辑、视图、工具等菜单。工具栏:提供常用的工具按钮,如打开、保存、仿真等。原理图编辑区:用于绘制电路原理图。元件库:包含各种电路元件,支持拖拽操作。属性面板:显示选中元件的属性,可以进行参数设置。仿真控制区:用于设置仿真参数和控制仿真过程。输出窗口:显示仿真结果和日志信息。打开模型编辑器:点击“工具”菜单,选择“模型编辑器”。选择模型类型:在模型编辑器中选择模型类型,如SPICE模型。输入模型参数:根据需要输入模型的参数,如电阻值、电容值等。保存模型。

kkchenjj的博客 1924

【LeetCode】641、设计循环双端队列

【代码】【LeetCode】641、设计循环双端队列。

呆呆的猫的博客 1515

ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优

会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。

PX4-SLAM-PNC 171

人工智能在文学领域的应用:创作无限可能的智能作家

人工智能在文学领域的应用:创作无限可能的智能作家 作者:禅与计算机程序设计艺术 1. 背景介绍 人工智能技术近年来飞速发展,在各个领域都有广泛应用。文学创作作为人类最高级的智力活动之一,也逐渐受到人工智能技术的影响和改变。随着自然语言处理、生成式模型等人工智能

AI天才研究院 1110

LeetCode 641. 设计循环双端队列

设计实现双端队列。实现ktruefalsetruefalsetruefalsetruefalse-1-1truefalsetruefalse// 设置容量大小为3// 返回 true// 返回 true// 返回 true// 已经满了,返回 false// 返回 2// 返回 true// 返回 true// 返回 true// 返回 4insertLastdeleteLastgetFrontgetRearisEmptyisFull2000。

m0_56090828的博客 1085

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

力扣641.设计循环双端队列(Java实现)

头部添加元素时,若 l == 0,则 l = limit - 1,deque[l] = value,size++若 l!= 0,则 l = l - 1,deque[l] = value,size++头部删除元素时,通常来说,我们需要将 deque[l] 返回,但本题没有这样要求,我们在此就不考虑了。若 l = limit - 1,则 l = 0,size–若 l!= limit - 1,则 l = l + 1,size–尾部添加元素时,

Wood_Like的博客 1983

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分享一道 LeetCode 641.设计循环双端队列的C++代码

    分享一道LeetCode 641.设计双端循环队列的C++代码,相互学习。此代码的执行用时 : 60 ms, 在Design Circular Deque的C++提交中击败了86.11% 的用户;内存消耗 : 16.3 MB, 在Design Circular Deque的C++提交中击败了92.11% 的用户。本题相比 622.设计循环队列,有相同之处,但也有不同的地方,最大的不同点在于...

weixin_42795141的博客 343

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Leetcode题641、设计双端循环队列(Python题解)Facebook面试题

问题: 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 getFront():从双端队列头部获

AI414010的博客 655

Leetcode 641. 设计循环双端队列

Leetcode 641. 设计循环双端队列 题目 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 deleteFront():从双端队列头部删除一个元...

clownote 224

LeetCode 641. 设计循环双端队列

设计循环双端队列 题目链接 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 ...

码农在途的博客 529

LeetCode第641题:设计循环双端队列

LeetCode第641题题目详述解法一解法二 题目详述 设计实现双端队列。 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 deleteFront():从双端队列头部删除...

weixin_42610002的博客 219
上一篇: Leetcode中等:236. 二叉树的最近公共祖先
下一篇: Leetcode简单:136. 只出现一次的数字
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程小助手_Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值