leetcode:641. 设计循环双端队列

  1. 设计循环双端队列
    实现 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

提示:

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

方法一:数组

class MyCircularDeque {
private:vector<int> elements;int rear, front;int capacity;public:MyCircularDeque(int k) {capacity = k + 1;rear = front = 0;elements = vector<int>(k + 1);}bool insertFront(int value) {if (isFull()) {return false;}front = (front - 1 + capacity) % capacity;elements[front] = value;return true;}bool insertLast(int value) {if (isFull()) {return false;}elements[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 elements[front];}int getRear() {if (isEmpty()) {return -1;}return elements[(rear - 1 + capacity) % capacity];}   bool isEmpty() {return rear == front;}bool isFull() {return (rear + 1) % capacity == front;}
};/*** 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();*/

方法二:链表

struct DLinkListNode {int val;DLinkListNode *prev, *next;DLinkListNode(int _val): val(_val), prev(nullptr), next(nullptr) {}
};class MyCircularDeque {
private:DLinkListNode *head, *tail;int capacity;int size;public:MyCircularDeque(int k): capacity(k), size(0), head(nullptr), tail(nullptr) {}bool insertFront(int value) {if (size == capacity) {return false;}DLinkListNode *node = new DLinkListNode(value);if (size == 0) {head = tail = node;} else {node->next = head;head->prev = node;head = node;}size++;return true;}bool insertLast(int value) {if (size == capacity) {return false;}DLinkListNode *node = new DLinkListNode(value);if (size == 0) {head = tail = node;} else {tail->next = node;node->prev = tail;tail = node;}size++;return true;}bool deleteFront() {if (size == 0) {return false;}DLinkListNode *node = head;head = head->next;if (head) {head->prev = nullptr;}delete node;size--;return true;}bool deleteLast() {if (size == 0) {return false;}DLinkListNode *node = tail;tail = tail->prev;if (tail) {tail->next = nullptr;}delete node;size--;return true;}int getFront() {if (size == 0) {return -1;}return head->val;}int getRear() {if (size == 0) {return -1;}return tail->val;}bool isEmpty() {return size == 0;}bool isFull() {return size == capacity;}
};/*** 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();*/

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

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

相关文章

机器视觉技术与应用实战(开运算、闭运算、细化)

开运算和闭运算的基础是膨胀和腐蚀&#xff0c;可以在看本文章前先阅读这篇文章机器视觉技术与应用实战&#xff08;Chapter Two-04&#xff09;-CSDN博客 开运算&#xff1a;先腐蚀后膨胀。开运算可以使图像的轮廓变得光滑&#xff0c;具有断开狭窄的间断和消除细小突出物的作…

饥荒Mod 开发(十五):小地图显示物品

饥荒Mod 开发(十四)&#xff1a;制作屏幕弹窗 本篇源码 饥荒中按下Tab键可以显示地图&#xff0c;刚开始进入游戏的时候地图是未探索状态&#xff0c;所以我们并不知道地图上面的物品分布情况。并且地图上只会显示很少一部分的物品&#xff0c;比如树枝&#xff0c;草&#xf…

C++二维数组(4)

蛇形遍历 题目描述&#xff1a;用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。 蛇形填充方法为&#xff1a; 对于每一条左下-右上的斜线&#xff0c;从左上到右下依次编号1,2,...,2n-1&#xff1b;按编号从小到大的顺序&#xff0c;将数字从小到大填入各 条斜线&…

【Linux】操作文件和目录

简介 常见的一些对文件和目录操作的命令如下&#xff1a; cp&#xff1a;复制文件和目录。mv&#xff1a;移动/重命名文件和目录。mkdir&#xff1a;创建目录。rm&#xff1a;删除文件和目录。ln&#xff1a;创建硬链接和符号链接。 用图形文件管理器来完成一些由这些命令执…

Debezium发布历史11

原文地址&#xff1a; https://debezium.io/blog/2016/10/25/Debezium-0-3-4-Released/ Debezium 0.3.4 发布 2016 年 10 月 25 日 作者&#xff1a; Randall Hauch 发布 mysql docker 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&…

链表基础知识(二、双向链表头插、尾插、头删、尾删、查找、删除、插入)

目录 一、双向链表的概念 二、 双向链表的优缺点分析​与对比 2.1双向链表特点&#xff1a; 2.2双链表的优劣&#xff1a; 2.3循环链表的优劣 2.4 顺序表和双向链表的优缺点分析​ 三、带头双向循环链表增删改查实现 3.1SList.c 3.2创建一个新节点、头节点 3.3头插 3.…

C# WPF上位机开发(知识产权ip保护)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发&#xff0c;这个时候大部分上位机基本上都是白送的&#xff0c;不会收取相关的费用。但是&#xff0c;如果上…

计算机网络基础——以太网类型,常见标准和架构

一、标准以太网 标准以太网&#xff08;10Mbit/s&#xff09;通常只定位在网络的接入层&#xff0c;新一代多媒体、影像和数据库产品很容易将10Mbit/s运行的以太网的带宽吞没。10Mbit/s 的以太网可以实现100m距离的连接。 二、快速以太网 数据传输速率为100Mbps 的快速以太网…

提示工程指南

大家好,欢迎来到本课程。在接下来的时间里,我们将一起学习如何使用 OpenAI 的提示工程指南来更有效地使用大语言模型。 目录 什么是提示工程?提示工程的原则提示工程的技巧提示工程的最佳实践提示工程的常见问题什么是提示工程? 提示工程是指设计和编写提示语以获得所需输…

项目遇到Bug如何解决(思路)

找到Bug,分析Bug,解决Bug 语法错误 ESLint:代码规则约束检测的操作&#xff0c;利用ESLint可以更好的帮助我们避免一些语法的错误信息&#xff0c;例如括号是不是匹配等。Prettier:代码格式化工具进行语法的错误和纠正&#xff0c;当出现语法错误的时候&#xff0c;代码格式化…

chrome升级后,调试vue在控制台输出总是显示cjs.js

当前chrome版本120.0.6099.72 在vue中使用console.log输出时&#xff0c;总是显示cjs.js多少多少行&#xff0c;不能显示源文件名及行数 【解决方案】 打开控制台的设置 左侧找到“Ignore List”&#xff0c;取消勾选"enable Lgnore Listing"&#xff0c;并重启chr…

4-Docker命令之docker history

1.docker history介绍 docker history命令是用来打印指定docker镜像的历史版本信息 2.docker history用法 docker history [参数] IMAGE [root@centos79 ~]# docker history --helpUsage: docker history [OPTIONS] IMAGEShow the history of an imageAliases:docker imag…

【Jmeter】Jmeter基础6-Jmeter元件介绍之前置处理器

前置处理器主要用于处理请求前的准备工作&#xff0c;如&#xff1a;参数、环境变量的设置等。 2.6.1、JSR223预处理程序 作用&#xff1a;请求前的准备工作。 参数说明&#xff1a; 语言&#xff1a;开发脚本所使用的语言&#xff0c;可通过下拉列表选择。参数&#xff1a;传…

第26节: Vue3 绑定到对象

在UniApp中使用Vue3框架时&#xff0c;你可以使用对象绑定语法将属性绑定到对象上。下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用绑定到对象&#xff1a; <template> <view> <button click"toggleActive">Toggle Active<…

TCP或许不是“可靠”的

你可能以为TCP是可靠的&#xff0c;从发送端看&#xff0c;send函数总是能把数据发送到接受端&#xff1b;而从接收端来看&#xff0c;总能把发送端接受的数据流完整传递给应用程序来处理。 可是我们认真分析过之后&#xff0c;发现“TCP是可靠的”这个论断是不正确的。 若是使…

Linux实操——安装Mysql

安装Mysql 一、检查是否已经安装了mariadb数据库,并卸载二、下载mysql包&#xff0c;并通过ftp上传到服务器三、解压安装包四、创建数据存储文件夹五、创建执行mysqld命令的用户&#xff0c;并初始化mysql六、启用传输安全七、启动mysql&#xff0c;验证是否安装成功 总结 博主…

vue2源码解析---watch和computed

监听属性watch 监听属性介绍 我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数wach 可以用于异步任务 监听属性的初始化 watch和computed都先走initSate判断传入选项 export function initState(vm) {const opts vm.$options; // 获取所有的选项if (opts.…

05 Rust 结构体

结构体 Rust 中的结构体&#xff08;Struct&#xff09;与元组&#xff08;Tuple&#xff09;都可以将若干个类型不一定相同的数据捆绑在一起形成整体&#xff0c;但结构体的每个成员和其本身都有一个名字&#xff0c;这样访问它成员的时候就不用记住下标了。 元组常用于非定…

【Hive】——DDL(DATABASE)

1 概述 2 创建数据库 create database if not exists test_database comment "this is my first db" with dbproperties (createdByAllen);3 描述数据库信息 describe 可以简写为desc extended 可以展示更多信息 describe database test_database; describe databa…

技术分享 | 接口测试价值与体系

如果把测试简单分为两类&#xff0c;那么就是客户端测试和服务端测试。移动端的测试包括 UI 测试&#xff0c;兼容性测试等&#xff0c;服务端测试包括接口测试。接口测试检查数据的交换、传递和控制管理过程。它绕过了客户端&#xff0c;直接对服务端进行测试。 接口测试的价值…