zoukankan      html  css  js  c++  java
  • Leetcode641.Design Circular Deque设计循环双端队列

    设计实现双端队列。

    你的实现需要支持以下操作:

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

    示例:

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

    提示:

    • 所有值的范围为 [1, 1000]
    • 操作次数的范围为 [1, 1000]
    • 请不要使用内置的双端队列库。
    class MyCircularDeque {
    public:
        int front;
        int rear;
        int count;
        vector<int> mydeque;
        int size;
        /** Initialize your data structure here. Set the size of the deque to be k. */
        MyCircularDeque(int k) {
            front = 0;
            rear = 0;
            count = 0;
            mydeque = vector<int>(k);
            size = k;
        }
    
        /** Adds an item at the front of Deque. Return true if the operation is successful. */
        bool insertFront(int value) {
            if(isFull())
                return false;
            front = front == 0? size - 1 : front - 1;
            mydeque[front] = value;
            count++;
            return true;
        }
    
        /** Adds an item at the rear of Deque. Return true if the operation is successful. */
        bool insertLast(int value) {
            if(isFull())
                return false;
            mydeque[rear] = value;
            rear = (rear + 1) % size;
            count++;
            return true;
        }
    
        /** Deletes an item from the front of Deque. Return true if the operation is successful. */
        bool deleteFront() {
            if(isEmpty())
                return false;
            front = (front + 1) % size;
            count--;
            return true;
        }
    
        /** Deletes an item from the rear of Deque. Return true if the operation is successful. */
        bool deleteLast() {
            if(isEmpty())
                return false;
            rear = rear == 0? size - 1 : rear - 1;
            count--;
            return true;
        }
    
        /** Get the front item from the deque. */
        int getFront() {
            if(isEmpty())
                return -1;
            return mydeque[front];
        }
    
        /** Get the last item from the deque. */
        int getRear() {
            if(isEmpty())
                return -1;
            return rear == 0? mydeque[size - 1] : mydeque[rear - 1];
        }
    
        /** Checks whether the circular deque is empty or not. */
        bool isEmpty() {
            if(count == 0)
                return true;
            return false;
        }
    
        /** Checks whether the circular deque is full or not. */
        bool isFull() {
            if(count == size)
                return true;
            return false;
        }
    };
  • 相关阅读:
    在win7 64位上安装VS2015的问题汇总
    关于C#类的深拷贝的问题
    线程、进程
    c#日志 log4net
    C#常识
    Tribon数据抽取的一些心得
    Java Web相关课程学习笔记
    过滤器、监听器、拦截器的区别
    SHH架构中几个配置文件解释 applicationContext.xml web.xml struts.xml
    vue关于动态增加路由页面
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10434038.html
Copyright © 2011-2022 走看看