題目描述:
請你設計乙個佇列,支援在前,中,後三個位置的 push 和 pop 操作。
請你完成 frontmiddleback 類:
frontmiddleback() 初始化佇列。
void pushfront(int val) 將 val 新增到佇列的 最前面 。
void pushmiddle(int val) 將 val 新增到佇列的 正中間 。
void pushback(int val) 將 val 新增到隊裡的 最後面 。
int popfront() 將 最前面 的元素從佇列中刪除並返回值,如果刪除之前隊列為空,那麼返回 -1 。
int popmiddle() 將 正中間 的元素從佇列中刪除並返回值,如果刪除之前隊列為空,那麼返回 -1 。
int popback() 將 最後面 的元素從佇列中刪除並返回值,如果刪除之前隊列為空,那麼返回 -1 。
請注意當有 兩個 中間位置的時候,選擇靠前面的位置進行操作。比方說:
將 6 新增到 [1, 2, 3, 4, 5] 的中間位置,結果陣列為 [1, 2, 6, 3, 4, 5] 。
從 [1, 2, 3, 4, 5, 6] 的中間位置彈出元素,返回 3 ,陣列變為 [1, 2, 4, 5, 6] 。
示例 1:
輸入:[「frontmiddlebackqueue」, 「pushfront」, 「pushback」, 「pushmiddle」, 「pushmiddle」, 「popfront」, 「popmiddle」, 「popmiddle」, 「popback」, 「popfront」]
[, [1], [2], [3], [4], , , , , ]
輸出:[null, null, null, null, null, 1, 3, 4, 2, -1]
解釋:frontmiddlebackqueue q = new frontmiddlebackqueue();
q.pushfront(1); // [1]
q.pushback(2); // [1, 2]
q.pushmiddle(3); // [1, 3, 2]
q.pushmiddle(4); // [1, 4, 3, 2]
q.popfront(); // 返回 1 -> [4, 3, 2]
q.popmiddle(); // 返回 3 -> [4, 2]
q.popmiddle(); // 返回 4 -> [2]
q.popback(); // 返回 2 ->
q.popfront(); // 返回 -1 -> (隊列為空)
1 <= val <= 109
最多呼叫 1000 次 pushfront, pushmiddle, pushback, popfront, popmiddle 和 popback 。
方法1:
主要思路:
(1)使用deque 雙端佇列實現對儲存結構兩端的快速刪除和新增;
(2)為了處理能夠快速處理中間值,可以使用兩個雙端佇列分別儲存前半部分和後半部分的元素,這樣可以快速處理中間元素;
(3)每次的插入和刪除要保證元素前面部分的數量等於後面部分的數量,或等於後面部分的元素數量加1這兩種狀態;
class
frontmiddlebackqueue
void
pushfront
(int val)
}void
pushmiddle
(int val)
else
++size;
}void
pushback
(int val)
}int
popfront()
--size;
int res=front_nums.
front()
; front_nums.
pop_front()
;//調整兩部分之間的狀態
if(back_nums.
size()
>front_nums.
size()
)return res;
}int
popmiddle()
int res;
//一定是從前面部分的後端彈出
res=front_nums.
back()
; front_nums.
pop_back()
;//調整兩部分之間的狀態
if(back_nums.
size()
>front_nums.
size()
)--size;
return res;
}int
popback()
--size;
//處理最終的只有乙個元素的情形,因為該最後乙個元素一定是在前面部分儲存
if(size==0)
//其他的情形,從後半部分的後端彈出
int res=back_nums.
back()
; back_nums.
pop_back()
;//處理兩部分的狀態
if(front_nums.
size()
-back_nums.
size()
>1)
return res;}}
;/**
* your frontmiddlebackqueue object will be instantiated and called as such:
* frontmiddlebackqueue* obj = new frontmiddlebackqueue();
* obj->pushfront(val);
* obj->pushmiddle(val);
* obj->pushback(val);
* int param_4 = obj->popfront();
* int param_5 = obj->popmiddle();
* int param_6 = obj->popback();
*/
設計前中後佇列
1,感覺這東西主要看我對 vector的熟悉程度阿。畢竟用vector模擬 2,insert函式 insert a,b 在a位置之前插入值為b的元素.3,再就是計算中間pos的位置,主要是根據有個 1,2,3,5,6 你自己寫個真的就好想了 然後就是這個位置數,要 是這樣用的insert q.beg...
Leetcode 1670 設計前中後佇列
題意 請你設計乙個佇列,支援在前,中,後三個位置的push和pop操作。請你完成frontmiddleback類 請注意當有兩個中間位置的時候,選擇靠前面的位置進行操作。比方說 解題思路 使用雙端佇列進行模擬即可 class frontmiddlebackqueue void pushfront i...
java中的前 和後
直接po 和截圖 package com.test public class beforeandafterplus 執行結果如下 public static void main string args else 所以c最終是21 system.out.println c c int d 30 這裡是...