LeetCode第641題解析

2021-10-08 08:06:33 字數 2731 閱讀 1816

設計實現雙端佇列。

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

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

解法一:用鍊錶實現迴圈雙端佇列

class mycirculardeque 

dlnode(int val) : value(val), next(null), prev(null)

};int size;

int capacity;

dlnode * head;

dlnode * tail;

/** initialize your data structure here. set the size of the deque to be k. */

mycirculardeque(int k)

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

bool insertfront(int value)

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

bool insertlast(int value)

/** 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()

};/**

* 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();

*/

LeetCode第146題解析

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果關鍵字 key 存在於快取中,則獲取關鍵字的值 總是正數 否則返回 1。寫入資料 put key,value 如果關鍵字已經存在,則變更其...

LeetCode第15題解析

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class so...

LeetCode第105題解析

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7方法一 遞迴 思路對於任意一顆樹而言,前序遍歷的形式總是 根節點,左...