622. 設計循環隊列

中等 隊列 數組 鏈表

思路

建立兩個變數leftright
加入資料就加到right所在的位置,讀資料則是left。處理完之後將變數+1。
主要關鍵在模運算來讓左指針重新回到起點。

變數limit以其size則是用來紀錄可以存放的數字上限,以及當前 queue 的大小。

程式碼

數組

class MyCircularQueue {
private:
    int left, right, limit, size;
    vector<int> nums;
public:
    MyCircularQueue(int k): left(0), right(0), size(0), limit(k) {
        nums.resize(k);
    }
    
    bool enQueue(int value) {
        if(isFull()) {
            return false;
        }
        else {
            nums[right] = value;
            right = (right + 1) % limit;
            ++size;
            return true;
        }
    }
    
    bool deQueue() {
        if(isEmpty()) {
            return false;
        }
        else {
            left = (left + 1) % limit;
            --size;
            return true;
        }
    }
    
    int Front() {
        if(isEmpty()) {
            return -1;
        }
        return nums[left];
    }
    
    int Rear() {
        if(isEmpty()) {
            return -1;
        }
        else {
            // 需要注意的是,right 當下的位置是要放數字的
            // right - 1 才是最後一個加入的數字。
            return nums[right == 0 ? limit - 1 : right - 1];
        }
    }
    
    bool isEmpty() {
        return size == 0;
    }
    
    bool isFull() {
        return size == limit;
    }
};

複雜度分析

  • 時間複雜度:O(1)O(1)
  • 空間複雜度:O(k)O(k)

顯示設定

背景線條
顯示背景網格線條
懸停發光
滑鼠懸停時顯示霓虹效果
聚光燈
跟隨滑鼠的聚光燈效果
背景透明度
開啟透明玻璃效果
主題顏色
自訂主要顏色