首页 > 其他分享 >leetcode 622.设计循环队列

leetcode 622.设计循环队列

时间:2022-09-18 21:13:52浏览次数:91  
标签:返回 622 return 队列 int 循环 end leetcode

622. 设计循环队列
难度
中等

402

 

 

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

你的实现应该支持如下操作:

MyCircularQueue(k): 构造器,设置队列长度为 k 。
Front: 从队首获取元素。如果队列为空,返回 -1 。
Rear: 获取队尾元素。如果队列为空,返回 -1 。
enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
isEmpty(): 检查循环队列是否为空。
isFull(): 检查循环队列是否已满。
 

示例:

MyCircularQueue circularQueue = new MyCircularQueue(3); // 设置长度为 3
circularQueue.enQueue(1);  // 返回 true
circularQueue.enQueue(2);  // 返回 true
circularQueue.enQueue(3);  // 返回 true
circularQueue.enQueue(4);  // 返回 false,队列已满
circularQueue.Rear();  // 返回 3
circularQueue.isFull();  // 返回 true
circularQueue.deQueue();  // 返回 true
circularQueue.enQueue(4);  // 返回 true
circularQueue.Rear();  // 返回 4
 

提示:

所有的值都在 0 至 1000 的范围内;
操作数将在 1 至 1000 的范围内;
请不要使用内置的队列库。

 

思路:

如何通过固定长度数组设计循环队列?

通过两个指针begin,end以及取余操作重复利用数组空间

class MyCircularQueue {
public:
    int* arr=nullptr;
    int end,begin;
    int capacity;
    MyCircularQueue(int k) {
         arr=new int[k];//建立一个大小为k的数组
         end=0;
         begin=0;
         capacity=k;
    }
    
    bool enQueue(int value) {
        //向循环队列插入一个元素
        if(isFull()){
            return false;
        }
        arr[end%capacity]=value;
        end++;
        return true;
    }
    
    bool deQueue() {
        //删除一个元素  删除队头的元素
        if(isEmpty()){
            return false;
        }
        begin++;
        return true;
    }
    
    int Front() {
        return isEmpty()?-1:arr[begin%capacity];
    }
    
    int Rear() {
        return isEmpty()?-1:arr[(end-1)%capacity];
    }
    
    bool isEmpty() {
         return end==begin;
    }
    
    bool isFull() {
         return end-begin==capacity;
    }
};

从代码中我们可以看到begin和end一直是自增操作,而确定队头队尾操作则需要取余来确定,这样在判断队空队满时直接根据大小关系判断 同时end-1可以直接取余、

博主力扣C++编译器负数取余出问题  因此如果end-1是负数想要取正确的余数需要加上一个k (end-1+k)%k

标签:返回,622,return,队列,int,循环,end,leetcode
From: https://www.cnblogs.com/TrenmenHu/p/16705783.html

相关文章

  • leetcode 652 寻找重复的子树
    652.寻找重复的子树难度中等630  给你一棵二叉树的根节点root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵......
  • leetcode 127 -- 哈希表
    题目描述217手写哈希表classSolution{public:#defineDEFAULT_LEN16#defineDEFAULT_FACTOR0.75fconstfloatfactor=DEFAULT_FACTOR;typed......
  • leetcode1047-删除字符串中的所有相邻重复项
    1047.删除字符串中的所有相邻重复项 方法一:stack 这种做法是纯纯的小丑做法,因为string类型本身就可以实现栈。这样的做法结束之后还要出栈倒序放到字符串里,时间开销......
  • leetcode 2414. 最长的字母序连续子字符串的长度
    leetcode2414.最长的字母序连续子字符串的长度题目描述字母序连续字符串是由字母表中连续字母组成的字符串。换句话说,字符串"abcdefghijklmnopqrstuvwxyz"的任意子......
  • leetcode 6184. 统计共同度过的日子数
    leetcode6184.统计共同度过的日子数题目描述Alice和Bob计划分别去罗马开会。给你四个字符串arriveAlice,leaveAlice,arriveBob和leaveBob。Alice会在日期arr......
  • [LeetCode] 2007. Find Original Array From Doubled Array
    Anintegerarray original istransformedintoa doubled array changed byappending twicethevalue ofeveryelementin original,andthenrandomly sh......
  • Go-数组模拟队列(环形列表)
      复制packagemainimport( "errors" "fmt" "os")typeCircleQueuestruct{ maxSizeint array[5]int headint tailint}//添加队列fu......
  • 数据结构一: golang 单向队列
    队列是什么,如何理解队列?队列一般称queue,是一个有序列表队列一般的原则为:先进先出【谁先来,谁先走】队列一般的场景可以想象:银行取现排队,移动营业厅排队,买咖啡排队等例......
  • 【Leetcode】64. 最小路径和
    题目(链接)给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:输入:grid=......
  • 用 Redis 做一个可靠的延迟队列
    我们先看看以下业务场景:当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?上述场景最简单直接的......