劍指offer | 09. 用兩個棧實現佇列
題目內容
用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式 appendTail 和 deleteHead
,分別完成在佇列尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,deleteHead 操作返回 -1 )
示例 1:
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
示例 2:
輸入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
輸出:[null,-1,null,null,5,2]
提示:
1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次呼叫
思路:
- 維護兩個棧,第一個棧支援插入操作,第二個棧支援刪除操作。
- 插入操作時都將元素插入到第一個棧中;
- 當要進行刪除操作時,若第二個棧為空,將第一個棧的元素pop後依次加入到第二棧裡面,全部匯入後,第二個棧的順序就是刪除的順序。
時間複雜度: 每個元素至多被插入和刪除1次,所以時間複雜度為O(1).
空間複雜度: 需要兩個棧儲存已有的元素,所以是O(n)。
完整程式碼:
class CQueue {
stack<int> stack1,stack2;
public:
CQueue() {
while(!stack1.empty()){
stack1.pop();
}
while(!stack2.empty()){
stack2.pop();
}
}
void appendTail(int value) {
stack1.push(value);
}
int deleteHead() {
//如果第二個棧為空
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
if(stack2.empty()){
return -1;
}else{
int deleteItem=stack2.top();
stack2.pop();
return deleteItem;
}
}
};
相關文章
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 《劍指 Offer》棧實現佇列佇列
- leetcode155. 最小棧 1441. 用棧操作構建陣列 劍指 Offer 09. 用兩個棧實現佇列LeetCode陣列佇列
- 劍指offer(java實現)第5題“用兩個棧實現佇列”-牛客網Java佇列
- 用兩個棧實現佇列佇列
- offer通過--7兩個棧實現佇列-2佇列
- offer通過--8兩個棧實現佇列-2佇列
- 兩個棧實現佇列佇列
- 兩個棧實現佇列操作佇列
- 面試題之【用兩個棧實現佇列】面試題佇列
- 題目9:用兩個棧實現佇列佇列
- 用2個棧實現佇列佇列
- 用佇列實現棧佇列
- 用棧實現佇列佇列
- [每日一題] 第七題:用兩個棧實現佇列每日一題佇列
- 《劍指offer》:[41]陣列中和為S的兩個數陣列
- 9. 題目:對佇列實現棧&用棧實現佇列佇列
- 劍指 Offer 59 - II. 佇列的最大值佇列
- 【ZJOF】用來個棧來實現一個佇列佇列
- Day 10| 232.用棧實現佇列 、 225. 用佇列實現棧佇列
- 用JavaScript實現棧與佇列JavaScript佇列
- 通過佇列實現棧OR通過棧實現佇列佇列
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 劍指 offer(1) -- 陣列篇陣列
- 劍指offer——包含min函式的棧函式
- 【劍指offer】包含min函式的棧函式
- leedcode-用佇列實現棧佇列
- leedcode-用棧實現佇列佇列
- 用棧實現佇列,實現Enqueue和Dequeue方法佇列ENQ
- 用佇列實現棧,用棧實現佇列,聽起來有點繞,都搞懂了就掌握了精髓!佇列
- 劍指offer之順序列印陣列陣列
- 【劍指offer】陣列中的逆序對陣列
- 【劍指offer】調整陣列順序陣列
- 【劍指offer】13.包含min函式的棧函式