leetcode 佇列習題02

2021-10-09 16:34:00 字數 3667 閱讀 2511

設計迴圈佇列

設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於 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

解題思路(參考題解)

1.使用陣列模擬佇列

2.使用模運算實現佇列的迴圈,tail=(tail+1)%size,head=(head+1)%size

3.返回陣列最後乙個元素時用if判斷是不是最後乙個元素

class mycircularqueue

/** insert an element into the circular queue. return true if the operation is successful. */

bool enqueue(int value)

return false;

}/** get the front item from the queue. */

int front()

return data[head];

}/** get the last item from the queue. */

int rear()

//如果tail為0就返回陣列的最後乙個元素

return tail==0?data[size-1]:data[tail-1];

}/** checks whether the circular queue is empty or not. */

bool isempty()

/** checks whether the circular queue is full or not. */

bool isfull()

};

設計迴圈雙端佇列

設計實現雙端佇列。

你的實現需要支援以下操作:

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(); // 返回 2

circulardeque.isfull(); // 返回 true

circulardeque.deletelast(); // 返回 true

circulardeque.insertfront(4); // 返回 true

circulardeque.getfront(); // 返回 4

解題思路

#include#include#include#includeusing namespace std;

class mycirculardeque

/** adds an item at the front of deque. return true if the operation is successful. */

bool insertfront(int value)

return false;

}/** adds an item at the rear of deque. return true if the operation is successful. */

bool insertlast(int value)

return false;

}/** deletes an item from the front of deque. return true if the operation is successful. */

bool deletefront()

/** deletes an item from the rear of deque. return true if the operation is successful. */

bool deletelast()

/** get the front item from the deque. */

int getfront()

/** get the last item from the deque. */

int getrear()

/** checks whether the circular deque is empty or not. */

bool isempty()

/** checks whether the circular deque is full or not. */

bool isfull()

};int main()

leetcode 佇列習題

最近的請求次數 寫乙個 recentcounter 類來計算最近的請求。它只有乙個方法 ping int t 其中 t 代表以毫秒為單位的某個時間。返回從 3000 毫秒前到現在的 ping 數。任何處於 t 3000,t 時間範圍之內的 ping 都將會被計算在內,包括當前 指 t 時刻 的 pi...

python經典習題 02

1.企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提10 利潤高 於10萬元,低於20萬元時,低於10萬元的部分按10 提成,高於10萬元的部分,可可提成7.5 20萬到40萬之間時,高於20萬元的部分,可提成5 40萬到60萬之間時高於 40萬元的部分,可提成3 60萬到100...

02 Leetcode第二章 棧,佇列,堆

棧可以直接使用stl的stack,佇列可以直接使用queue和deque.ps deque有clear函式,queue沒有,stack也沒有。225 用佇列實現棧 解法一 直接呼叫deque來實現push和pop操作。解法二 借用queue.每次push是將最後進隊的元素放在佇列的頭部,這樣才能保證...