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

【数据结构-队列】力扣641. 设计循环双端队列

设计实现双端队列。

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

示例 1:
输入
[“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
在这里插入图片描述

数组

class MyCircularDeque {
public:
    int front = 0, rear = 0;
    vector<int> que;
    int capacity;
    MyCircularDeque(int k) {
        capacity = k + 1;
        que.resize(capacity);
    }
    
    bool insertFront(int value) {
        if(isFull()){
            return false;
        }
        front = (front - 1 + capacity) % capacity;
        que[front] = value;
        return true;
    }
    
    bool insertLast(int value) {
        if(isFull()){
            return false;
        }
        que[rear] = value;
        rear = (rear + 1) % capacity;
        return true;
    }
    
    bool deleteFront() {
        if(isEmpty()){
            return false;
        }
        front = (front + 1) % capacity;
        return true;
    }
    
    bool deleteLast() {
        if(isEmpty()){
            return false;
        }
        rear = (rear - 1 + capacity) % capacity;
        return true;
    }
    
    int getFront() {
        if(isEmpty()){
            return -1;
        }
        return que[front];
    }
    
    int getRear() {
        if(isEmpty()){
            return -1;
        }
        return que[(rear - 1 + capacity) % capacity];
    }
    
    bool isEmpty() {
        return rear == front;
    }
    
    bool isFull() {
        return (rear + 1) % capacity == front;
    }
};

这道题的做法和力扣622很相似,我们只需要添加deleteLast()getFront()两个方法即可。需要注意的是,在题解中,rear指向的是插入的位置,而front指向的是队列头元素的位置,所以在插入队头元素的时候要先移动front再插入,而插入队尾元素的时候先插入再移动rear。


http://www.kler.cn/a/416502.html

相关文章:

  • spark同步mysql数据到sqlserver
  • 实时数据开发|Flink如何实现不同数据源输入--DataSource模块
  • 学习笔记044——HashMap源码学习2
  • llamaindex实战-QueryEngine-查询引擎使用概述
  • 基于R语言森林生态系统结构、功能与稳定性分析与可视化
  • USB-C取电协议芯片与LDR6328的功能解析
  • 什么是堆?
  • Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
  • ubuntu20配置mysql注意事项
  • 【Linux】nvidia-smi输出参数详解
  • Mac配置和启动 Tomcat
  • MySQL 查询 执行顺序
  • Node.js:开发和生产之间的区别
  • 中国前首富胡志标亮相创客匠人盛会,点燃创始人 IP 新思维火花
  • javaweb-day01-html和css初识
  • Jmeter进阶篇(28)结合AI做性能测试:开启性能测试自动化新篇章
  • 使用postcss动态设置fontsize,刷新时出现极小页面的问题
  • Libevent库-http通信不同请求方式的处理
  • 哪些行业对六西格玛管理方法的需求较大?
  • 基于若依框架和Vue2 + Element-UI 实现图片上传组件的重写与优化
  • Python 3 教程第34篇(MySQL 数据库连接 - PyMySQL 驱动)
  • 表征对齐在训练DiT模型中的重要性
  • PHP ODBC:连接数据库的桥梁
  • ASP.NET Core面试题汇总
  • 首发VM手眼标定xml文件点位取出以及转其他格式
  • 【Python】深入理解Python的字符串处理与正则表达式:文本处理的核心技能